1

ClassAとClassBの2つのクラス間にManyToMany関係がありますが、この関係のテーブル(objectA_objectBと呼ばれるテーブル)には主キーがありません。

私のClassAには、次のものがあります。

@ManyToMany(fetch=FetchType.LAZY)
@OrderBy(value="name")
@JoinTable(name="objectA_objectB",
        joinColumns=
            @JoinColumn(name="idObjectA", referencedColumnName="id"),
        inverseJoinColumns=
            @JoinColumn(name="idObjectB", referencedColumnName="id")
)
private List<ClassB> objectsB;

私のClassBでは逆の関係にあります

@ManyToMany
List<ClassA> objectsA;

両方のIDの主キーを作成したいのですが、列の名前を変更する必要があります。PKが欠落しているのはなぜですか?どうすれば定義できますか?

これが役立つ場合は、JPA2.0Hibernate実装を使用します。

ありがとう。

4

1 に答える 1

1

あなたが正しいです

私はあなたの質問に示されているのと同じアプローチをしました。実際、Hibernate は期待どおりに複合主キーを生成しません。

したがって、その複合主キーを生成する場合は、@ManyToMany を @OneToMany-@ManyToOne 関係に分割する必要があります。ここで方法を参照してください...

アップデート

双方向のリレーションシップがある場合は、mappedBy 属性を使用してリレーションシップの逆側を設定する必要があります

// ClassA

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="objectA_objectB",
    joinColumns=
        @JoinColumn(name="idObjectA", referencedColumnName="id"),
    inverseJoinColumns=
        @JoinColumn(name="idObjectB", referencedColumnName="id")
)
private List<ClassB> objectsB;

...

// ClassB

// You do not specify the foreign key column here (it is mapped by the other side)
@ManyToMany(mappedBy="objectsB")
List<ClassA> objectsA;

mappingBy="objectsB" 言う

ClassA の objectsB プロパティに自分が含まれているかどうかを確認し、含まれている場合は、関係を objectA_objectB テーブルに保存します

于 2010-04-08T08:57:57.040 に答える