JPA ist FetchType eager loading.LAZY Kind Sammlungen

Habe ich gesehen, dass mehrere ähnliche Fragen mit 0 gute Antworten.

Sollte dies sehr einfach. Ich bin mit Java JPA und ich möchten, laden Sie eine Liste von Kind-Entitäten manchmal aber nicht die ganze Zeit. Leider, JPA scheint nicht zu hören von mir, wenn ich sage, um es zu Holen träge. Ich habe 100% sicher, dass es nirgends in meinem code, wo die childEntities Attribut zugegriffen wird, in keiner Weise. Jedoch, alle untergeordneten Einheiten werden trotzdem immer sofort geladen, bei meinem PPV.em().finden, (..) - Aufruf. Dies ist, wie erkläre ich die Beziehung mit Anmerkungen.

@Entity
@Table(name = "parentEntities")
public class ParentEntity implements Serializable {
    ....
    @OneToMany(mappedBy = "entityPropertyName", fetch = FetchType.LAZY)
    public List<ChildEntity> childEntities;
    ...
}

Und dies ist, wie lade ich die übergeordnete Entität:

ParentEntity parentEntity = JPA.em().find(ParentEntity.class, id);

Darüber hinaus hoffte ich, manchmal zu eifrig, Holen diese Sammlung und in der Lage sein, um dynamisch zu sagen, JPA Wann zu tun ist. Das ist Schritt 2 wenn. Schritt 1 ist, nur um dies richtig funktioniert.

Wie werden Sie überprüfen, dass es geholt wird? Gibt es eine orm.xml oder anderen Ort, Zuordnungen oder entity-Listener kann gesetzt werden, entweder überschreiben der faule Einstellung oder zum auslösen der Sammlung? Welchen provider verwenden Sie?
Im debugger kann ich sehen, direkt nach dem finden rufen, dass die Liste aufgefüllt wird. Ich bin nicht mit jedem XML für Konfiguration, nur Anmerkungen.
Jetzt habe ich eine extrem aufgebläht und hacky Lösung. Ich habe zwei Eltern-Einheiten, eine mit der Liste der untergeordneten Sammlung und eine ohne. Leider wird dieser hack (wie viele hacks tun) Kaskaden Schmutz in den rest von meinem code.
Welchen provider benutzt du, und hat diese Einheit schon vorher geladen, so dass die Beziehung vielleicht schon geholt wurden? Versuchen Sie eine em.aktualisieren Sie nach dem finden und zu sehen, es die Beziehung ist untriggered, und auch stellen Sie sicher, dass Ihr debugger ist nicht die Auslösung der Liste - geben Sie die Liste, und wie wird Sie ausgelöst werden könnten, provid bestimmten
JPA ist eine Spezifikation, während hibernate, EclipseLink etc. implementieren, die spec. Sie sind mit einer Implementierung, und es ist wichtig, die. Sie brauchen nicht zu ändern, alles andere als zu versuchen die Aktualisierung. Wenn es funktioniert, dann wissen wir, Ihrem Anbieter unterstützt faul und so etwas wie die Rechtsperson, die vorinstalliert kommt.

InformationsquelleAutor Cameron Askew | 2013-07-27

Schreibe einen Kommentar