2016-08-30 8 views
0

PersonとCarの2つのエンティティがあるとします。1つのプロパティのみがエンティティであるHibernate OneToOne双方向マッピング

私は、私はこのような双方向のマッピングを行うことができます知っている:this answerに触発

@Entity 
public class Person implements Serializable { 

    @Id Integer id; 

    @OneToOne 
    @JoinColumn(name = "car_id") 
    Car car; 
} 

@Entity 
public class Car implements Serializable { 

    @Id Integer id; 

    @OneToOne(mappedBy = "car") 
    Person person; 
} 

しかし、CarエンティティにPersonエンティティ全体を格納する必要はありません。私は車がこのように見えるようにします:

@Entity 
public class Car implements Serializable { 

    @Id Integer id; 

    Integer person_id; 
} 

そしてまだ2つのエンティティ間に双方向マッピングがあります。これを行う方法はありますか?

+0

両方のエンティティ**オブジェクト**が互いに参照するときに双方向関係が存在するので、実際はそうではありません。したがって、作成時に 'Car'インスタンスに設定しない限り、' Car'クラスに 'person_id'を持つことはできません。 – px06

答えて

0

最初に、1つのエンティティを他のエンティティと関連付けると、関連するエンティティの[データベース内のIDのみ]属性がテーブル[AnyToMneの場合は同じテーブル、ManyToManyの場合はJoinTable]が外部キーとして格納されます。したがって、データベースの観点からは、[外部キーから離れた余分なオーバーヘッドはありません]がオプティマイズされています。

Java OOPの観点から見ると、あなたの1つのエンティティはフィールドとして他のエンティティを含んでいます。これは実際のアプリケーションで役立つ静かです。ただし、すべてのケースで他の関連エンティティを必要としない場合は、JPAが提供する遅延ロード機能を使用することができます[デフォルトではフェッチタイプはLazyです]。意味、データベースからオブジェクトをフェッチすると、関連付けられた他のオブジェクトにはnull値があり、そのオブジェクトを実際に使用すると初期化されます。

あなたのケースでは、Personは所有エンティティでCarは所有エンティティで、データベースPersonテーブルでは外部IDとしてcar idを持ちます。 CarにはID列のみがあり、外部キーとしてのIDはありません。

関連する問題