Hibernate可嵌入对象:找不到组件属性

我正在尝试将JPA @Embeddable与Hibernate 一起使用。实体和可嵌入对象都具有一个名为的属性id

@MappedSuperclass

public abstract class A {

@Id

@GeneratedValue

long id;

}

@Embeddable

public class B extends A {

}

@Entity

public class C extends A {

B b;

}

这引起了org.hibernate.MappingException: component property not found: id

我想避免使用@AttributeOverrides。因此,我试图进行设置spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.DefaultComponentSafeNamingStrategy(我正在使用Spring

Boot)。这没有任何效果(相同的例外)。但是,我怀疑设置会被忽略,因为指定不存在的类不会引发异常。

奇怪的是,即使使用此变体

@Entity

public class C extends A {

@Embedded

@AttributeOverrides( {

@AttributeOverride(name="id", column = @Column(name="b_id") ),

} )

B b;

}

我仍然遇到相同的错误。

回答:

命名策略配置已更改。根据Spring Boot文档的新方法是:

spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl

另外,您不得@Id在中使用@Embeddable。因此,我@MappedSuperclass为可嵌入对象创建了单独的对象:

@MappedSuperclass

public abstract class A {

@Id

@GeneratedValue

long id;

}

@MappedSuperclass

public abstract class E {

@GeneratedValue

long id;

}

@Embeddable

public class B extends E {

}

@Entity

public class C extends A {

B b;

}

这样,表格C就有两列idb_id。缺点当然是的A,并E介绍一些redundency。非常欢迎对此提出DRY方法的意见。

以上是 Hibernate可嵌入对象:找不到组件属性 的全部内容, 来源链接: utcz.com/qa/413251.html

回到顶部