Kann eine JPA-Entitätsklasse zwei embedded ( @Embedded
) -Felder enthalten? Ein Beispiel wäre:
@Entity
public class Person {
@Embedded
public Address home;
@Embedded
public Address work;
}
public class Address {
public String street;
...
}
In diesem Fall Person
kann a zwei Address
Instanzen enthalten - Heim und Arbeit. Ich verwende JPA mit der Implementierung von Hibernate. Wenn ich das Schema mit den Tools für den Ruhezustand generiere, wird nur eines eingebettet Address
. Was ich möchte, sind zwei eingebettete Address
Instanzen, deren Spaltennamen unterschieden oder mit einem Präfix versehen sind (z. B. zu Hause und bei der Arbeit). Ich weiß @AttributeOverrides
, aber dies erfordert, dass jedes Attribut einzeln überschrieben wird. Dies kann umständlich werden, wenn das eingebettete Objekt ( Address
) groß wird, da jede Spalte einzeln überschrieben werden muss.
quelle
name="street"
sich dies auf den Namen der Eigenschaft bezieht, nicht auf den Spaltennamen.Bei Verwendung von Eclipse Link ist eine Alternative zur Verwendung von AttributeOverrides die Verwendung eines SessionCustomizers. Dies löst das Problem für alle Entitäten auf einmal:
quelle
classDescriptor.getJavaClass()
den SessionCustomizer anhand einer Liste von Klassen zu überprüfen, die davon betroffen sein sollen.Wenn Sie den Ruhezustand verwenden, können Sie auch ein anderes Namensschema verwenden, das Spalten eindeutige Präfixe für identische eingebettete Felder hinzufügt. Siehe Automatisches Hinzufügen eines Präfixes zu Spaltennamen für @ Embeddable-Klassen
quelle