Ich baue eine Baumstruktur, die in der Datenbank gespeichert ist. Die Beziehung basiert auf den Feldern id, parend_id in der Datenbanktabelle. Ich verwende Federdaten und überwintern.Fetchtype.LAZY mit gleicher Entität
Für den Zugriff auf die Baumstruktur baue ich eine Entitätsklasse "Node" und ein "NodeRepository". Die Entitätsklasse hat ein Attribut "Kinder", das eine @ OneToMany-Beziehung zu sich selbst hat.
Das Abrufen der Knoten ist kein Problem. Aber das Abrufen der Kinder ist ein Problem, weil es sich außerhalb einer Transaktionsumgebung ("versäumt, eine Sammlung von Rollen langsam zu initialisieren") befindet.
Ich änderte den Fetchmode zu eifrig. Aber das ist auch ein Problem wegen der Beziehung zu sich selbst, es endete damit, dass die gesamte Baumstruktur abgerufen wurde.
Also, was ist die beste Methode in diesem Fall, um die Wiedereingliederung der Kinder auf der einen Seite leicht zu halten und nicht die ganze Struktur auf der anderen Seite zu holen?
Ich habe keine Zeit, um eine vollständige Antwort zu schreiben/eine doppelte Frage nachschlagen, aber ich würde Ihnen raten, in * Entity-Graphen *, eine JPA 2.1-Funktion zu lesen, die zuverlässig mit bedingten Laden von faulen Eigenschaften umzugehen. – Gimby
Ich habe schon @NamedEntityGraph angeschaut, aber ich denke, dass es mein Problem wegen der rekursiven Beziehung nicht lösen wird. An welchem Punkt muss ich den Hinweis platzieren, um die Kinder zu bekommen? – st4rbuck
Ich habe nie verstanden, warum Hibernate die Spezifikation erzwingt, so dass faule Sammlungen nicht auf getrennte Entitäten geladen werden können. Persönlich ist dies einer der Gründe, warum ich EclipseLink bevorzuge, denn obwohl EclipseLink die JPA-Referenzimplementierung ist, haben sie sich entschieden, diese Regel zu brechen, weil es keinen Sinn ergibt und für den Entwickler ein absoluter Schmerz ist. –