ホームページ >データベース >mysql チュートリアル >Spring および Hibernate での BLOB フィールドの遅延読み込みが期待どおりに動作しないのはなぜですか?

Spring および Hibernate での BLOB フィールドの遅延読み込みが期待どおりに動作しないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 17:51:29373ブラウズ

Why is Lazy Loading of Blob Fields in Spring and Hibernate Not Working as Expected?

Spring と Hibernate での BLOB フィールドの遅延読み込み

データベース テーブルでラージ バイナリ データ (BLOB) を扱う場合、そのデータを最適化することが重要です。パフォーマンスの問題とメモリの消費を回避するための取得。 1 つのアプローチは、必要な場合にのみデータを取得できる遅延読み込みを使用することです。ただし、この手法は Hibernate と Spring で問題を引き起こす場合があります。

この状況では、データベース、Spring Bean、およびエンティティ クラスを次のように構成しました:

データベース構成(関連部分):

<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>

Entity Class (関連アノテーション):

<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>

blobField を遅延としてマークしているにもかかわらず、次のような問題が発生しています。大量のデータを取得するときに OutOfMemoryError が発生する。これは、遅延読み込みメカニズムが期待どおりに動作していないことを示しています。

ドキュメントとユーザー エクスペリエンスに基づいて、BLOB の遅延読み込みに影響を与える可能性のある要因をいくつか示します。

  • データベース ドライバー: 一部のデータベース ドライバーは、BLOB の遅延読み込みを完全にはサポートしていない可能性があります。
  • バイトコード計測: バイトコード計測 (Javassist や CGLib など) の使用が報告されています。遅延読み込みのパフォーマンスが向上します。
  • 1 対 1 マッピングの回避策: 推奨される回避策として、遅延 1 対 1 としてマッピングされた BLOB フィールドを保持する専用のエンティティを作成できます。あなたの本体との関係。この方法では、BLOB が必要な場合にのみ取得されるようにする必要があります。

問題を解決するには、次の手順を検討してください。

  1. データベース ドライバーが遅延読み込みを完全にサポートしていることを確認します。
  2. 必要に応じて、Hibernate 構成でバイトコード インストルメンテーションを有効にします。
  3. 上記の手順で問題が解決しない場合は、推奨される 1 対 1 マッピングの回避策を実装してください。

以上がSpring および Hibernate での BLOB フィールドの遅延読み込みが期待どおりに動作しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。