2016-07-21 2 views
1

エンティティは次のようになっています。他のエンティティに対してエンティティを共有するにはどうすればいいですか?OneToMany

@Entity 
class Property extends BaseEntity { 
    @Basic 
    private String name; 
    @Basic 
    private String value; 
} 

基本的な意図は、このエンティティを他のエンティティプロパティとして使用することです。

@Entity 
class MyEntity extends BaseEntity { 
    @OneToMany 
    private List<Property> properties; 
} 

@Entity 
class YourEntity extends BaseEntity { 
    @OneToMany 
    private List<Property> properties; 
} 

どうすればよいですか?各オーナーのフィールドをPropertyに定義する必要がありますか?

@Entity 
class Property extends BaseEntity { 
    @Basic 
    private String name; 
    @Basic 
    private String value; 
    @ManyToOne(optional = true) 
    private MyEntity myEntity; 
    @ManyToOne(optional = true) 
    private YourEntity yourEntity; 
    @ManyToOne(optional = true) 
    private OtherEntity otherEntity; 
} 
+1

あなたの「財産」と他のエンティティとの間で共有したいレベルによって異なります。たとえば、YourEntity、MyEntityなどはすべて同じプロパティを参照できますか?または、参照元ごとにpopertyが一意であるかどうか。後であれば、集約コレクションを調べて、各所有エンティティが参照用に独自のPropertyテーブルを取得し、Propertyに一意のIDが不要になるようにすることができます。共有する場合は、それを識別する独自のIDが必要です。または、名前/値のペアを複合IDにすることができます – Chris

答えて

1

基本的には良い解決策です。エンティティをよりきれいに保つのに役立つ結合テーブルを作成するオプションがあります(また、ManyToManyとしても使用できます)。ほとんどの場合、あなたが提供するオプションを使用することを好む[シンプルさはgoooooodものです: )]しかし、他の同僚はこの問題について異なった視点を持っていました。

TL.DR:あなたの提供されたコードが動作しており、個人的にはそれが好きです。他の方法もありますが、少し遅くなります。

関連する問題