2016-04-14 11 views
2

私のタイトルはわかりませんが、私はいくつかの言葉で私の質問を説明する方法を知らない。他の多くの異なるエンティティ(Hibernateを持つ)によってマッピングされたエンティティ

私は双方向マッピングを持つ2つのクラスを持っています。 Image.class

@Entity 
@Table(name = "image") 
public class Image{ 

    @Id 
    @Column(name = "id") 
    @GeneratedValue 
    Long id; 

    @OneToOne(targetEntity = Father.class) 
    @JoinColumn(referencedColumnName = "id", name="father") 
    @Size(min = 1, max = 11) 
    Father father; 

} 

Father.class:今すぐ

class Father{ 

     @Id 
     @Column(name = "id") 
     @GeneratedValue 
     Long id; 

     @OneToOne(mappedBy = "father") 
     Image pic; 
} 

、私は他のクラスのフィールドとしてImage.class使用したいと思います。どのように私はImage.classの「マッピング」を編集する必要がありますのは、私の質問があり、私はMother.class

class Mother{ 

      @Id 
      @Column(name = "id") 
      @GeneratedValue 
      Long id; 

      @OneToOne(mappedBy = "mother") 
      Image pic; 
    } 

を持っているとしましょうか?最後のシナリオImage.classMother.classの分野で、Father.classのフィールドではありませんので、当然のことImage.class

は、Father fatherのようなフィールドを持つことはできません。

多くの異なるEntitiesでマッピングできるEntityを1つのテーブルに保存する方法があったことを覚えています。 Image.classFather.classまたはMother.classにバインドされていることを区別するフィールドをテーブルに追加する必要があることを覚えています。

私はもはやインターネット上のそのドキュメントを見つけることができません。

答えて

3

「フィールド」はリレーションを記述するための正しい用語ではありません。 FatherおよびMotherは、の関係からImageを持ちますが、これは一方向である可能性があります。つまり、Imageは、そのエンティティがどのエンティティに属しているかわかりません。

これはおそらく最も合理的な方法ですが、双方向関係を必要とする理由がない場合は、単方向ルートにすることをお勧めします。関係を一方向にするには、Imageからマッピングを完全に削除しながら、@OneToOneからmappedbyを削除して、MotherFatherを所有側にする必要があります。


あなた本当には、あなたが共通のスーパークラスを使用する必要があるだろうことを知っておく必要がありますとの関係をナビゲートできるようにするHibernateに必要がある場合は(もがあっても実体である必要がありますインスタンスはありません)、おそらくクラスごとのテーブル継承です。

さらに、画像に関係する人物に関する情報をImageに保存して、手動で検索することもできます。

関連する問題