Vielleicht möchten Sie Folgendes überprüfen:
Ссылка
Insbesondere seit 5.1:
%Vor%
Setzen Sie die Eigenschaft @Embedded
auf true und voilà!
Ich treffe das gleiche Problem mit Hibernate.
Die ursprüngliche Frage nach dem "Warum" wird beantwortet.
Aber um über eine Lösung zu sprechen, verwende ich einfach eine @ PostLoad-Methode, also innerhalb der Klasse Embedder etwas wie:
%Vor%
Aktualisierung:
Warnung! Der obere Code funktioniert, hat aber einen unerwarteten Nebeneffekt! Sobald Sie Ihr Objekt mit einem Null-Zeiger aus der Datenbank geladen haben, wird es aufgrund dieses Post-Load-Codes als fehlerhaft markiert!
In meinem Fall führt diese Nebenwirkung zu einem SQL-Update-Befehl von einem Thread, der nur die Daten und Stunden des Suchens dieses Fehlers laden soll!
Grundlegende Frage: Warum werden @Embedded-Objekte nicht immer instanziiert?
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:
%Vor%
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen.
___ tag123jpa ___ Die Java Persistence API (JPA) ist eine Java-Spezifikation für den Zugriff, die Speicherung und die Verwaltung von Daten zwischen Java-Objekten / Klassen und einer relationalen Datenbank. Es ist Teil der EJB 3.0-Spezifikation und der Industriestandard für ORM (Object to Relational Mapping).
___ tag123ebean ___ Ebean ist ein Objekt-Relational-Mapping-Tool für Open Source.
Das Ziel besteht darin, eine einfachere Alternative zu JPA-Implementierungen (Java Persistence API) bereitzustellen
wie Hibernate und Eclipselink.
___ qstnhdr ___ @Embedded-Objekt wird nicht automatisch instanziiert, wenn es keine grundlegenden Datentypfelder hat
___ tag123embeddable ___ hilf uns dieses Wiki zu bearbeiten
___ antwort13999578 ___
Ich denke nicht, dass die JPA-Spezifikation eindeutig beschreibt, was passieren soll, wenn die Eigenschaften eines @Embedded
-Objekts alle null sind, aber zumindest einige Implementierungen ein Objekt mit null-Eigenschaften als ein Null-Objekt behandeln. was du siehst.
Das scheint eine vernünftige Implementierung zu sein. Sicherlich war es in meinem Code nützlich (mit Hibernate), wenn ich ein AutoInstantiated
-Objekt auf null setze, möchte ich, dass es null bleibt, wenn ich eine persistente Version lade.
In Ihrem Beispiel kann die Klasse theKey
niemals als null betrachtet werden, da die primitive Eigenschaft %code% niemals null sein kann.