2017-12-21 17 views
1
を使用して複数の親のため@MapsIdを使用して、1対1の実体を共有することができ

私は@MapsId私はJPA

Like this

を使用して@OneToOne関係をマッピングする方法についていくつかのベストプラクティスを読んでいると私は思ったんだけどエンティティが「共有」されている場合は動作しますか?例えば

...

Employee has Address OneToOne... 
Department has Address OneToOne... 

たちはここに同じアプローチを使用することはできますか?またはEMPLOYEESテーブルとDEPARTMENTSテーブルはfk_address_idを持ちますか?

私はこれをインタフェースHasAddressで処理する必要がありますか?

答えて

1

これはうまくいきますが、両親の間ではなく、親と子の間で共有されます。そのため、EmployeeAddress行を使用し、Departmentは異なる行を使用します。

ただし、共有する場合は@OneToOneの関係ではありません。 Addressが親になり、EmployeeDepartmentが子エンティティであるため、@ManyToOneです。この場合、EmployeeDepartmentの両方は、Address PKまでのFK列を使用します。

したがって、Address行を共有する場合は、多対1の関連付けです。そうでない場合は、Addressエンティティでは@MapsIdと、DepartmentEmployeeにはmappedByの1対1を使用できます。

+0

ここで正しい言葉は、「共有」の「TABLE」でしょう。 '従業員 'と'部署'が自分の 'アドレス 'を管理できるからです。 –

+0

この場合、 'Address'のフィールドに' Employee'と 'Department'クラスの' @ OneToOne'を '@ MapsId'で置く必要がありますか? –

+0

Nope。 Address行を共有する場合は、多対1の関連付けです。そうしなければ、Addressエンティティ上のマップとDepartmentおよびEmployeeのmappedByと一対一で使用できます。 –

関連する問題