3

私は次のことをしようとしています(非常に不自然な例):

マッピング テーブル A_B を作成した多対多の関係を形成する 2 つのテーブル A と B があります。次に、マッピング テーブル A_B と 1 対多の関係を形成するテーブル C があります。

tableA
------
a_id [pk]

それから

tableB
------
b_id [pk]

それから

tableA_B
-------
a_id [pk]
b_id [pk]

それから

tableC
------
c_id [pk]

それから

tableC_AB
---------
c_id [pk]
a_id [pk]
b_id [pk]

そのため、Hibernate で A、B、C のエンティティを作成しました...

ClassA {
    ....
    @JoinTable(
        name="A_B",
        joinColumns={@JoinColumn(name="a_id")},
        inverseJoinColumns={@JoinColumn(name="b_id")}
    )
    @ManyToMany(cascade = {CascadeType.ALL})
    private Set<B> bset = new HashSet<B>();
}

then (逆の関係)

ClassB {
    @ManyToMany(mappedBy="bset")
    private Set<A> subjects = new HashSet<A>();
}

これにより最初のマッピング A_B が作成されますが、休止状態でマッピング C_AB を作成する方法がわかりません。A_B のエンティティすら持っていない (データベースにのみ存在する) ので、どうすればよいでしょうか?

どんな助けでも感謝します。

乾杯、

Jラブ

4

1 に答える 1

0

暗黙の多対多テーブルの代わりに、独立した関連付け/結合/リンク エンティティ クラスを使用することをお勧めします。現実世界には、作成時間、作成者、契約、雇用契約などの追加フィールドを持たない結合テーブルはありません。

だから私は意味します:

  • tableA_B は独立したエンティティにマップする必要があり、2 つのものがリンクされている場合は追加のフィールドが必要です。
  • tableC_AB も独立したエンティティにマップする必要があります。
  • コレクションフィールドを見つけたいときは、HQL で順番にコレクションフィールドを見つけて取得することができます。
  • 多対多にはバグがあり、関連付けテーブルには追加のフィールドを含めることはできませんが、含める必要があります
于 2013-03-11T15:30:17.980 に答える