2017-02-27 2 views
0

Ich habe Probleme, herauszufinden, wie man eine Klasse aufbaut, die ein @Embedded Feld hat, das träge abgerufen werden muss. Ich habe versucht, das Feld mit @Basic(fetch = FetchType.LAZY) zu kommentieren, aber es bewirkt, dass die Persistenz-API das Feld als Basistyp behandelt, der Serializable implementiert, so dass es das Feld auf ein BYTEA-Feld in der Datenbank (postgresql) abbildet. Ich habe es auch auf Derby getestet, und das gleiche passiert.Gibt es eine Möglichkeit, ein @Embedded-Feld faul zu holen?

Ich habe auch versucht, die Felder der @Embeddable Klasse einzeln mit @Basic(fetch = FetchType.LAZY) annotieren, anstatt das @Embedded Feld der Entität zu kommentieren, die es hat. Das generierte Schema ist in diesem Fall korrekt, aber die Felder werden eifrig abgerufen, wenn ich Instanzen der Entität lade.

Mein Verständnis ist, dass die @Basic Annotation nur für grundlegende Felder/Eigenschaften verwendet wird, so dass der erste Fall erwartet wird. Aber warum werden die Felder der @Embeddable Klasse eifrig abgerufen, auch wenn sie mit @Basic(fetch = FetchType.LAZY) annotiert sind? Außerdem weiß ich, dass die Abrufstrategie durch die @Basic- und Beziehungsanmerkungen spezifiziert werden kann, aber gibt es eine andere Möglichkeit zu spezifizieren, dass Felder träge abgerufen werden sollten? Ich verwende EclipseLink 2.6, aber lassen Sie mich wissen, ob das Verhalten für andere Versionen von EclipseLink oder für einen anderen Anbieter unterschiedlich ist.

Antwort

0

Direkt kann man nicht, weil @Embedded-Objekte funktionieren, aber durch das Setzen von Attributen im Objekt sollte es funktionieren.

@Basic (Fetch = FetchType.LAZY)

dass faul Denken Sie daran, sollten Gebrauch nur auf Sammlungen oder große Objekte sein, und diese Einstellung Typ holen auf faulen nur ein Anhaltspunkt für Anbieter ist, es bedeutet nicht, dass es wird es immer faul anstatt eifrig holen.

Verwandte Themen