2011-12-14 11 views
1

Hibernate 4は遅延ロードに関する改善をもたらしますか?JPA + Springを使用する場合のHibernate 4と遅延ロードに関する改善

私たちはJPAプロバイダとしてHibernateを使用しており、私たちのコードは休止状態の特定のものをきれいに保ちたいと考えています。私たちは、Hibernateセッションojbectsを使用したくありません。私たちのアプリケーションでは、SpringとJSFも使用しています。 OpenSessionInViewFilterOpenSessionInViewInterceptorがあるとわかりましたが、どちらも豆が要求の範囲にあるときにのみ動作するようです。 Springセッションスコープ(@Scope("session"))のインターセプトは動作していないようです。

他のフレームワークでは、豆のweavingまたはenhancementが許可されています。 Hibernate 4でこれと同様のことが可能になったのですか?または、コードが休止状態の特定エクステンションから解放されるようにする他の新機能が導入されていますか? (いくつかの設定はもちろんOKです)

私はすでにWhat's new in Hibernate 4?をチェックしていて、彼らがセッションファクトリーで働いているのを見ましたが、役立つかどうかは分かりませんでした。

+0

また、Springでは、AOPによる製織が可能です。 @Transactionalアノテーションをチェックしてトランザクションの境界を定義しましたか? –

+0

何が問題なのですか?あなたは何をしたいのですか、あなたは何を持っているのですか?あなたの質問では、遅延ロードについて、次にSpringインターセプタについて、次に織り方について話しています。 3つの異なるテーマがあります。 –

+0

@JBNizet私は、Hibernateの遅延読み込みを手間をかけずに使用できるようにしたいと考えています。私は自分のコードでorg.hibernateのインポートを望んでおらず、怠惰な読み込みがhibernate 4で動作するかどうか疑問に思っていました。 ViewFilterとViewInterceptorsはあまりにも限られているようです。私はJPA APIと他には何もコード化したくありません。 –

答えて

0

リクエストスコープ以外のスコープのLazyLoadingに関しては、ハイバネート4では改善されていないようです。

0

HibernateはJPAの実装です。 JPA APIだけを使ってそれを使うと、Hibernate固有のコードがなくなります。 Hibernate APIを直接使用する場合でも、遅延ロードはJPAアノテーションを使用して構成されます。 Hibernateで遅延ロードを使用するには、Hibernate固有のアノテーションは必要ありません。

OpenSessionInViewフィルタ/インターセプタは、遅延読み込みに直接リンクされていません。トランザクションが終了した後でもセッションを開くことができます。とにかく、このフィルター/インターセプターはあなたのクラスにHibernate特有のコードを持つよう強制しませんので、問題のどこにあるのかは分かりません。

SpringはJPAもサポートしており(HibernateはJPAエンジンです)、OpenSessionInViewFilter/interceptorと同じ役割を果たすOpenEntityManagerInViewFilter/Interceptorを持っていますが、JPAの場合はそうです。

+0

あなたの答えをありがとう。 OpenSessionInViewフィルタ/インターセプタは、リクエストスコープ内のBeanに対してのみ動作しています。セッションスコープでBeanを処理することはできません。 OpenEntityManagerのドキュメントを読むと、リクエストスコープに限られているようです。 –

+1

はい、セッションはリクエストの最後に閉じられます。 –

+0

ドキュメントをチェックするOpenJPAとEclipselinkは 'weaving'や' enhancement'の後にリクエストに制限されているようではなく、Hibernateがバージョン4でその動作を改善するのかどうか疑問に思っています。 –

0

セッションスコープにエンティティBeanを持つべきではないと思います。セッションスコープ内にバリューオブジェクトを用意し、必要に応じてリクエスト中に関連するエンティティBeanをロードする必要があります。

Extended PersistenceContextを使用していますか?

+0

私はそれらを投げ捨てました。 –

関連する問題