2011-10-20 6 views
3

ここには、IdClassの詳細を省略した縮小スニペットがあります。私が午前問題は、テーブル定義がある次のとおりです。JPA2 JoinColumns JoinColumn名が尊重されていません。 (Hibernate 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:

java.lang.ExceptionInInitializerError テーブルclient_personalitiesにpersonality_type_id物理名から論理列名を見つけることができませんによって引き起こさ:ORG

それは例外をスローします.hibernate.MappingException:テーブルclient_personalitiesの物理名personality_type_idから論理カラム名を見つけることができません。

このケースは、多くの例で説明されていますが、カラム名をオーバーライドしません。

例:

リスト10-12。プロJPA 2(ISBNコード978-1-4302-1956-9/978-1-4302-1957-6)から従属識別子

@Entity 
@IdClass(ProjectId.class) 
public class Project { 
    @Id private String name; 
    @Id 
    @ManyToOne 
    private Department dept; 
    // ... 
} 

とプロジェクト

+0

手元にはもっと根本的な問題があるようです。https://hibernate.onjira.com/browse/HHH-6754 –

答えて

0

おそらく、それぞれ、@PrimaryKeyJoinColumns/@PrimaryKeyJoinColumnに切り替えてみてください。

this caseでお手伝いしましたが、同じ理由が考えられます。

+0

JPA2を使用しているので、私はこのケースを避けることを望んでいました。 。 PRO JPA 2の285ページを参照してください。 –

+0

@JasonPyeron説明してくれてありがとう、私はJPA 2でこれが変更されたことを知らなかった。 – MaDa

関連する問題