这是简化的代码片段,省略了 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)
)
类(class)是:
@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_ID、TRAIT_ID、TRAIT_PERSONALITY_TYPE_ID。
为什么 @JoinColumn 名称被忽略?
它抛出异常:
初始sessionFactory创建失败.org.hibernate.MappingException:无法从表client_personalities中的物理名称personality_type_id找到逻辑列名称
java.lang.ExceptionInInitializerError 引起原因:org.hibernate.MappingException:无法从表 client_personalities 中的物理名称 individual_type_id 找到逻辑列名称
许多示例都介绍了这种情况,但没有覆盖列名称。
例如:
list 10-12。具有依赖标识符的项目@Entity
@IdClass(ProjectId.class)
public class Project {
@Id private String name;
@Id
@ManyToOne
private Department dept;
// ...
}
来自 Pro JPA 2(ISBN 978-1-4302-1956-9/978-1-4302-1957-6)
最佳答案
也许可以尝试分别切换到@PrimaryKeyJoinColumns/@PrimaryKeyJoinColumn
。
它帮助this case ,我相信可能也是同样的原因。
关于java - JPA2 JoinColumns JoinColumn 名称不受尊重。 (Hibernate 3.6 和 H2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7836528/