@Embedded-Objekt wird nicht automatisch instanziiert, wenn es keine grundlegenden Datentypfelder hat

8

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%     
allprog 28.11.2012, 13:30
quelle

3 Antworten

3
___ answer40841578 ___

Vielleicht möchten Sie Folgendes überprüfen:

Ссылка

Insbesondere seit 5.1:

%Vor%

Setzen Sie die Eigenschaft @Embedded auf true und voilà!

    
___ answer44902462 ___

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!

    
___ qstntxt ___

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.

    
___
MattR 22.12.2012, 02:34
quelle
3

Vielleicht möchten Sie Folgendes überprüfen:

Ссылка

Insbesondere seit 5.1:

%Vor%

Setzen Sie die Eigenschaft hibernate.create_empty_composites.enabled auf true und voilà!

    
Sylvain Lecoy 28.11.2016 10:05
quelle
1

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!

    
Martin Metz 04.07.2017 09:43
quelle

Tags und Links