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
