[英]Hibernate Embedded class as NaturalId
I use Hibernate 4.1.我使用 Hibernate 4.1。
I have an entity Sanad
and an embedded class Gas
inside Sanad
.我在Sanad
中有一个实体Sanad
和一个嵌入式类Gas
。
@Entity
public class Sanad{
@Id
private int id;
@NaturalId
@Embedded
Gas gas;
}
@Embeddable
@AttributeOverrides({
@AttributeOverride(name = "gate", column = @Column(name = "gate")),
@AttributeOverride(name = "serial", column = @Column(name = "serial"))
})
public class Gas{
int gate;
String serial;
}
I want gas
field inside Sanad
to be NaturalId.我希望Sanad
内部的gas
是 NaturalId。 How can I do that?我怎样才能做到这一点?
When I use @NaturalId
above gas field in Sanad
, I face this expcetion at deploy time:当我在Sanad
的气田上方使用@NaturalId
时,我在部署时遇到了这个问题:
Caused by: org.hibernate.MappingException: Unable to find logical column name from physical name gas in table Sanad
at org.hibernate.cfg.Configuration$MappingsImpl.getLogicalColumnName(Configuration.java:3258)
at org.hibernate.cfg.IndexOrUniqueKeySecondPass.doSecondPass(IndexOrUniqueKeySecondPass.java:83)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1695)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1424)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
You can add the @NaturalId annotation to an embedded object as follows:您可以将 @NaturalId 注释添加到嵌入对象,如下所示:
@Entity
public class Sanad{
@Id
private int id;
@NaturalId
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "gate", column = @Column(name = "gate")),
@AttributeOverride(name = "serial", column = @Column(name = "serial"))
})
Gas gas;
}
@Embeddable
public class Gas{
@Column(name = "gate")
int gate;
@Column(name = "serial")
String serial;
}
See the example here:请参阅此处的示例:
https://docs.jboss.org/hibernate/orm/5.0/mappingGuide/en-US/html/ch07.html https://docs.jboss.org/hibernate/orm/5.0/mappingGuide/en-US/html/ch07.html
I think that the problem is the same that is reported in this Hibernate bug我认为问题与此 Hibernate 错误中报告的问题相同
https://hibernate.atlassian.net/browse/HHH-4249 https://hibernate.atlassian.net/browse/HHH-4249
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.