「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Spring および Hibernate での BLOB フィールドの遅延読み込みが期待どおりに動作しないのはなぜですか?

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

2024 年 11 月 7 日に公開
ブラウズ:948

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

Spring および Hibernate での BLOB フィールドの遅延読み込み

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

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

データベース構成(該当部分):



  

エンティティ クラス (関連するアノテーション):

@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "BlobField", columnDefinition = "LONGBLOB")
@Type(type = "org.springframework.orm.hibernate3.support.BlobByteArrayType")
private byte[] blobField;

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

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

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

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

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

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3