2011-10-20 73 views
3

這是減少的片段,省略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)

+0

似乎有一個更基本的問題:https://hibernate.onjira.com/browse/HHH-6754 –

回答

0

也許嘗試分別切換到@PrimaryKeyJoinColumns/@PrimaryKeyJoinColumn

它在this case幫助,我相信這可能是相同的原因。

+0

我希望避免這種情況,因爲我使用JPA2我應該能夠做到這一點。請參閱PRO JPA 2的第285頁。 –

+0

@JasonPyeron感謝您解釋,我不知道這在JPA 2中發生了變化。 – MaDa