這是減少的片段,省略IdClass的細節。我遇到的問題是表的定義是:JPA2 JoinColumns JoinColumn名稱不受尊重。 (休眠3.6和H2)
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 物理名稱查找邏輯列名產生的原因:組織.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;
// ...
}
從臨JPA 2(ISBN號978-1-4302-1956-9/978-1-4302-1957-6)
似乎有一個更基本的問題:https://hibernate.onjira.com/browse/HHH-6754 –