Lazy Loading-Probleme mit @Lob in Spring und Hibernate
In Webanwendungen, die Spring und Hibernate verwenden, sind Datenbankeinträge mit dateibezogenen Daten vorhanden auf einer Webseite gerendert. Während der Prozess bei geringen Datenmengen reibungslos funktioniert, lösen übermäßige Datenmengen einen „OutOfMemoryError“ aus.
Als erster Fehlerbehebungsschritt wurde das Speicherproblem durch Festlegen der „blobField“-Eigenschaften auf „null“ behoben, was darauf hindeutet, dass Lazy Das Laden war trotz der Annotation @Basic(fetch=FetchType.LAZY) ineffektiv.
Erklärungen und Problemumgehungen
Laut Hibernate-Dokumentation sind @Lob-Felder von Natur aus faul und tun dies auch erfordern keine expliziten Lazy-Annotationen. Es wurde jedoch in allen Datenbanken und Treibern inkonsistentes Verhalten gemeldet.
Eine Lösung umfasst Bytecode-Instrumentierungstechniken wie Javassist oder Cglib.
Empfohlene Lösung
Zu Um dieses Problem zuverlässig beheben zu können, wird empfohlen, die Datenzuordnungen neu zu strukturieren. Anstatt Eigenschaften zu verwenden, erstellen Sie „falsche“ Eins-zu-eins-Zuordnungen. Entfernen Sie LOB-Felder aus der Primärklasse, erstellen Sie neue Klassen, die auf dieselbe Tabelle und denselben Primärschlüssel verweisen, aber nur die erforderlichen LOB-Felder enthalten. Markieren Sie diese Zuordnungen als Eins-zu-Eins, Fetch Select und Lazy True. Dieser Ansatz gewährleistet ein verzögertes Laden, während das übergeordnete Objekt in der Sitzung verbleibt.
Das obige ist der detaillierte Inhalt vonWarum schlägt Lazy Loading für @Lob-Felder im Frühling und Ruhezustand fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!