Hibernate可嵌入对象:找不到组件属性
我正在尝试将JPA @Embeddable
与Hibernate 一起使用。实体和可嵌入对象都具有一个名为的属性id
:
@MappedSuperclasspublic 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)。这没有任何效果(相同的例外)。但是,我怀疑设置会被忽略,因为指定不存在的类不会引发异常。
奇怪的是,即使使用此变体
@Entitypublic 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
为可嵌入对象创建了单独的对象:
@MappedSuperclasspublic 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
就有两列id
和b_id
。缺点当然是的A
,并E
介绍一些redundency。非常欢迎对此提出DRY方法的意见。
以上是 Hibernate可嵌入对象:找不到组件属性 的全部内容, 来源链接: utcz.com/qa/413251.html