这是简化的代码段,省略了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名称?
它抛出异常:
初始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(ISBNs 978-1-4302-1956-9 / 978-1-4302-1957-6)
答案 0 :(得分:0)
也许尝试分别切换到@PrimaryKeyJoinColumns/@PrimaryKeyJoinColumn
。
它在this case中有所帮助,我相信这可能是同样的原因。