0

私は2つのエンティティを持っています

@Entity
class A {
    @Id
    private Long Id;

    //attributes of A
}

@Entity
class B {  
    xxx
    private A instanceOfA_1;

    xxx
    private A instanceOfA_2;
}

ご覧のとおり、クラス B にタイプ A の 2 つの属性があります。

Hibernate でこれら 2 つの属性にどのように注釈を付けますか? 最終的に、データベースでは、テーブル B に 2 つの列があり、各列にはテーブル A のキー ID が含まれていると予想されます。

これは単純な ORM の質問だと思いますが、一人では理解できませんでした...


編集:上記の回答の後、私が次のことをすることをお勧めしますか?

@Entity
class A {
  @Id
  private Long Id;  
  //attributes of A
}

@Entity
class B {
@ManyToOne
private A instanceOfA_1;
@ManyToOne
private A instanceOfA_2;
}

これにより、次のテーブルが作成されますか?

Table A
  id
  attributes

Table B
  a_id_1
  a_id_2

テーブル B の列の名前 (つまり、a_id_1 と a_id_2) を指定するにはどうすればよいですか?

4

2 に答える 2

2

これはむしろ典型的な状況であり、それぞれに@ManyToOneアノテーションを付ける必要があります。@OneToOneは、リレーションごとに 1 つの B のみを特定の A に関連付けることができる場合に使用する必要があります。データベース スキーマがエンティティから生成される場合、@OneToOne を使用すると、外部キーに一意の制約が存在します。

@JoinColumnを使用して、外部キー列の名前を指定できます。

 @JoinColumn(name="preferred_column_name")
于 2013-02-18T19:48:06.890 に答える
1

これを試して :

@Entity
class A {
   @Id
   private Long Id;  
}

@Entity
class B {
   @ManyToOne
   @JoinColumn(name="A_1")
   private A instanceOfA_1;

   @ManyToOne
   @JoinColumn(name="A_2")
   private A instanceOfA_2;
}
于 2013-02-19T10:00:05.803 に答える