Java 不尊重JPA2 JoinColumns JoinColumn名称。(Hibernate 3.6和H2)
下面是简化的代码段,省略了IdClass的详细信息。我遇到的问题是表格定义是:Java 不尊重JPA2 JoinColumns JoinColumn名称。(Hibernate 3.6和H2),java,hibernate,jpa,jpa-2.0,Java,Hibernate,Jpa,Jpa 2.0,下面是简化的代码段,省略了IdClass的详细信息。我遇到的问题是表格定义是: ClientPersonalityModel ( client_id int not null, personality_trait_id int not null, personality_type_id int not null, primary key (client_id, personality_trait_id, personality_type_id) ) 课程是: @Entity publi
ClientPersonalityModel
(
client_id int not null,
personality_trait_id int not null,
personality_type_id int not null,
primary key (client_id, personality_trait_id, personality_type_id)
)
课程是:
@Entity
public class ClientPersonalityModel
{
@Id
@ManyToOne
@JoinColumn(name="client_id")
protected ClientModel client;
@Id
@ManyToOne
@JoinColumns({
@JoinColumn(name="personality_trait_id",referencedColumnName="id"),
@JoinColumn(name="personality_type_id",referencedColumnName="personality_type_id")
})
protected ClientPersonalityTraitModel trait;
}
但是持久性框架试图使用CLIENT\u ID、TRAIT\u ID、TRAIT\u PERSONALITY\u TYPE\u ID列
为什么忽略@JoinColumn名称
它抛出一个异常:
初始sessionFactory creationfailed.org.hibernate.MappingException:无法从表client\u personalities中的物理名称personality\u type\u id中找到逻辑列名
java.lang.ExceptionInInitializeError
原因:org.hibernate.MappingException:无法从表client\u personalies中的物理名称personality\u type\u id中找到逻辑列名
许多示例都介绍了这种情况,但没有覆盖列名
例:
清单10-12。具有依赖标识符的项目
@Entity
@IdClass(ProjectId.class)
public class Project {
@Id private String name;
@Id
@ManyToOne
private Department dept;
// ...
}
从专业JPA 2(ISBNs 978-1-4302-1956-9/978-1-4302-1957-6)可能尝试分别切换到
@PrimaryKeyJoinColumns/@PrimaryKeyJoinColumn
我相信这可能是同样的原因。我希望避免这种情况,因为我使用的是JPA2,我应该能够做到这一点。参见PRO JPA 2的第285页。@JasonPyeron感谢您的解释,我不知道JPA 2中发生了变化。似乎有一个更基本的问题在手: