Lazy Loading Blob Fields in Spring and Hibernate
Beim Umgang mit großen Binärdaten (BLOBs) in Datenbanktabellen ist es wichtig, diese zu optimieren Abrufen, um Leistungsprobleme und Speicherverbrauch zu vermeiden. Ein Ansatz besteht darin, Lazy Loading zu verwenden, wodurch die Daten nur dann abgerufen werden können, wenn sie benötigt werden. Allerdings kann diese Technik bei Hibernate und Spring manchmal eine Herausforderung darstellen.
In Ihrer Situation haben Sie Ihre Datenbank, Spring Beans und Entitätsklasse wie folgt konfiguriert:
Datenbankkonfiguration (relevante Teile):
<code class="xml"><bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="lobHandler" ref="lobHandler" /> </bean></code>
Entitätsklasse (relevant Anmerkung):
<code class="java">@Lob @Basic(fetch = FetchType.LAZY) @Column(name = "BlobField", columnDefinition = "LONGBLOB") @Type(type = "org.springframework.orm.hibernate3.support.BlobByteArrayType") private byte[] blobField;</code>
Obwohl Sie das BlobField als Lazy markiert haben, tritt beim Abrufen großer Datenmengen ein OutOfMemoryError auf. Dies deutet darauf hin, dass sich der Lazy-Loading-Mechanismus nicht wie erwartet verhält.
Basierend auf der Dokumentation und Benutzererfahrungen sind hier einige Faktoren aufgeführt, die das Lazy-Loading von BLOBs beeinflussen können:
Um Ihr Problem zu lösen, berücksichtigen Sie die folgenden Schritte:
Das obige ist der detaillierte Inhalt vonWarum funktioniert das verzögerte Laden von Blobfeldern im Frühjahr und Ruhezustand nicht wie erwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!