Grundlegende Frage: Warum werden @Embedded-Objekte nicht immer instanziiert?@Embedded-Objekt wird nicht automatisch instanziiert, wenn es keine grundlegenden Datentypfelder hat
Die interessante Beobachtung ist, dass Ebean @Embedded-Objekte nicht instanziiert, wenn diese keine grundlegenden Datentypen (int, boolean ...) enthalten oder vorher nicht berührt wurden. Beispiel:
@Entity
public class Embedder {
// getNotAutoInstantiated() will return null if this field was not touched before
@Embedded
private NotAutoInstantiated notAutoInstantiated = new NotAutoInstantiated();
// getAutoInstantiated() will always return an instance!
@Embedded
private AutoInstantiated autoInstantiated = new AutoInstantiated();
}
@Embeddable
public class AutoInstantiated {
// theKey is why this embedded object is always instantiated
private int theKey;
private String field1;
}
@Embeddable
public class NotAutoInstantiated {
private String field2;
}
Möglicherweise tritt ein Problem mit Feldnamen-Kollisionen zwischen mehreren eingebetteten Objekten auf. Normalerweise ordnet der JPA-Anbieter die Felder für eingebettete Objekte den Spalten in der übergeordneten Tabelle zu. Wenn die eingebetteten Feldnamen lange ausgeführt werden, können Sie abgeschnittene Feldnamen in der Datenbank und damit Kollisionen in den Spaltennamen erhalten. – Zagrev
Das Beispiel kann täuschen. Die Namen sind in meinem Code viel kürzer und sie beginnen nicht mit dem gleichen Präfix. Aber auch im Beispiel beginnen die Felder mit "not" und "auto", also wäre die Kürzung kein großes Problem. – allprog
Eigentlich habe ich über "field" und "field" nachgedacht. – Zagrev