【发布时间】:2011-12-11 19:11:41
【问题描述】:
这里是简化的 sn-p,省略了 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
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 名称会被忽略?
抛出异常:
Initial sessionFactory creationfailed.org.hibernate.MappingException:无法从表client_personalities中的物理名称personality_type_id中找到逻辑列名
java.lang.ExceptionInInitializerError 原因:org.hibernate.MappingException:无法从表client_personalities中的物理名称personality_type_id中找到逻辑列名
这种情况在许多示例中都有介绍,但没有覆盖列名。
例如:
清单 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)
【问题讨论】:
-
手头似乎还有一个更根本的问题:hibernate.onjira.com/browse/HHH-6754
标签: java hibernate jpa jpa-2.0