web-dev-qa-db-ja.com

結合テーブルとの1対多の関係

結合テーブルを使用してモデル化された1対多の関係があります。

create table t1 (id int primary key, name varchar(10) /*...*/);
create table t2 (id int primary key, name varchar(10) /*...*/);
create table t1_t2 (t1_id int, t2_id int, primary key (t1, t2));

テーブルは、1つのt1と多くのt2の関係をモデル化することになっています。 JPAを使用してこれらのテーブルをモデル化する正しい方法は何ですか?

34
Hosam Aly

1つのT1から多数のT2の一般的なテーブルは、T2にT1を指す外部キーを持つことです。 T1_T2テーブルは通常必要ありません。

JPA構造は、1対多、場合によっては双方向になります。


記述した構造を機能させるために、いくつかの調整があります。 T1_T2を変更できます。

  • t2に一意の制約を追加します(1つのT2のみが許可されるように)

それは本当にあなたが望むものですか?

編集済み:はい、それはあなたが望むものです;-)

ネット上で多くの例を見つけることができるとは思わない。証明された解決策はありませんが、これらの線に沿って何かを試します:

Hibernateアノテーションリファレンスドキュメント で、「2.2.5.3.2.3。結合テーブルを使用した単方向」を参照してアイデアを取得してください。次のようになります。

    @Entity
    public class Trainer {
        @OneToMany
        @JoinTable(
            name="TrainedMonkeys",
            joinColumns = @JoinColumn( name="trainer_id"),
            inverseJoinColumns = @JoinColumn( name="monkey_id")
        )
        public Set<Monkey> getTrainedMonkeys() {
        ...
    }
56
KLE