永続化レイヤーでトランザクションを管理したいのですが、結果を遅延取得しようとすると、次のエラーが発生します。
org.hibernate.LazyInitializationException: ロールのコレクションを遅延初期化できませんでした
この問題を解決するために、LockMode またはその他の方法を使用できますか? トランザクションなしでIDでオブジェクトを見つけることができますか?
永続化レイヤーでトランザクションを管理したいのですが、結果を遅延取得しようとすると、次のエラーが発生します。
org.hibernate.LazyInitializationException: ロールのコレクションを遅延初期化できませんでした
この問題を解決するために、LockMode またはその他の方法を使用できますか? トランザクションなしでIDでオブジェクトを見つけることができますか?
問題は、コンテンツにアクセスしようとすると、Hibernate セッションが既に閉じられていることです。Hibernate は、セッションなしではコンテンツをロードできません。通常、この問題を軽減するには 2 つの方法があります。
ページの操作が完了するまで、セッションを閉じないでください。このパターンは「セッション イン ビュー」と呼ばれ、たとえばサーブレット フィルタを使用して実装できます。
セッションを閉じる前に、必要なすべてのコンテンツを初期化してください。オブジェクト全体を初期化したい場合は、Hibernate.initialize(object) を使用できます。
編集: Hibernate では、トランザクション以外では何もできません。
http://www.hibernate.org/43.htmlで hibernate の公式ソリューションを見ることもでき ます。
Or just use another ORM ... like Ebean ORM where lazy loading just works :)
通常、問題は、オブジェクトの属性の1つが遅延ロードされることです。実行できることの1つは、クエリにプリロードすることです。
セールセールからsale.date>:startDateが参加してフェッチsale.productに参加
これにより、sale.productオブジェクトがプリフェッチされます。
このサイトには詳細情報があります:http ://www.javalobby.org/articles/hibernate-query-101/ 。
-デイブ
プロパティをプリフェッチするには多くの方法があるため、セッションが閉じられた後も存在します。
@OneToMany(fetch = FetchType.EAGER)
が、同様の休止状態の方法があります。FETCH INTO
キーワードを探します。