2016-07-21 8 views
1

Ich habe eine Entität wie folgt aussehen.Wie kann ich eine Entität für OneToMany anderer Entitäten teilen

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

Die grundlegende Absicht ist die Verwendung dieser Entität als andere Entitäten Eigenschaften.

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

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

Wie kann ich das tun? Muss ich das Feld jedes Besitzers in Property definieren?

@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

Es gibt viele Möglichkeiten, es zu tun, es hängt alles von Ihrer "Eigenschaft" ab und welche Ebene der Freigabe Sie zwischen anderen Entitäten haben möchten. Können zum Beispiel YourEntity, MyEntity und andere alle dieselbe Eigenschaft referenzieren? Oder wird eine Eigenschaft pro referenzierende Entität eindeutig sein. Wenn dies der spätere Fall ist, möchten Sie möglicherweise Aggregatsammlungen untersuchen, sodass jede besitzende Entität eine eigene Eigenschaftentabelle für ihre Referenzen erhält und die Eigenschaft keine eindeutige ID benötigt. Wenn es geteilt werden soll, benötigt es eine eigene ID, die es identifiziert, oder Sie können das Name/Wert-Paar zur zusammengesetzten ID machen – Chris

Antwort

1

Grundsätzlich ist es eine gute Lösung, die Sie hier dargestellt haben. Es gibt die Möglichkeit, eine Join-Tabelle zu erstellen, die Ihnen hilft, die Entität "sauberer" zu halten (und auch als ManyToMany verwendet werden könnte). In den meisten Fällen bevorzuge ich die Option You bereitgestellt [simplicity is a gooooood thing:)], aber andere Kollegen haben unterschiedliche Ansichten zu diesem Problem.

TL.DR: Ihr bereitgestellter Code funktioniert und ich persönlich bevorzuge es. Es gibt andere Möglichkeiten, aber diese sind ein bisschen langsamer usw.

Verwandte Themen