2010-12-28 17 views
0

Profileテーブルの一部に参加する権限テーブルを持つ多くの関連するものを持っています。特権テーブルには、profile_idとprivilege_idのマルチパートキーがあります。 profile_idにのみProfileテーブルからPrivilegeテーブルに参加し、特権のコレクションを取得したいと思います。私のプロフィールクラスでJPA @OneToManyがマルチパートキー

私が持っている

@OneToMany(fetch = FetchType.LAZY) 
@JoinColumn(name = "PROF_ID") 
public List<ProfilePrivilegeEO> getProfilePrivileges() 
{ 
    return m_profilePrivileges; 
} 

マイ特権クラスiは、静的ウィーバーが言うことを行うときProfilePrivilegeIdが、しかし

@Embeddable 
public class ProfilePrivilegeId 
    implements Serializable 
{ 
    private Integer m_profileId; 
    private Integer m_privNumber; 

    @Column(name = "PROF_ID") 
    public Integer getProfileId() 
    { 
     return m_profileId; 
    } 

    @Column(name = "PRIV_NUM") 
    public Integer getPrivNumber() 
    { 
     return m_privNumber; 
    } 

    ..... 
} 

ある

private ProfilePrivilegeId m_profileId; 

@EmbeddedId 
public ProfilePrivilegeId getProfileId() 
{ 
    return m_profileId; 
} 

あります

The @JoinColumns on the annotated element [method getProfilePrivileges] from the entity  
class [class com.acme.ProfileEO] is incomplete. When the source entity class uses a 
composite primary key, a @JoinColumn must be specified for each join column using the 
@JoinColumns. Both the name and the referencedColumnName elements must be specified in 
each such @JoinColumn. 

しかし、プロファイルテーブルがprivilege_idsの知識を持たないJPA iは特権テーブルの両方のキーを指定することを要求すべき理由は...私は見ていない、それはなぜいない正当な理由で、JPAによって作られただけで、任意の決断です。 ..これを動作させるためには何をする必要がありますか? (私はのEclipseLinkを使用しています。)

答えて

0

のIDをカプセル化PrivilegeIdクラスを作成します。そのクラスを@Embeddedにして、それを@EmbeddedIdでPrivilegeに入れます。 PrivilegeIdクラスで

は、プロファイルと特権IDに@OneToManyを置きます。

+0

最初の部分は私がやったことです。プロファイルは、特権に対するOneToManyです。他の方法ではありません。結合は、profile_idのみで行われます。 – MeBigFatGuy

+0

ProfilePrivilegeEOとは何ですか? @JoinColumnsアノテーションを入れ、そこに2つの@JoinColumnを使用します。 @OneToManyでは、キーが外部クラスのPrivilege(実際にはどこにあるべきか)にあるので、これは生成されたスキーマに負の影響を与えません。 –

+0

ProfilePrivilegeEOは、特権テーブルのエンティティです。私は、Profileクラスから指定する2つの@JoinColumnを持っていません。なぜなら、特権についてはわからないからです。それが問題だ。 – MeBigFatGuy