SpringおよびHibernate、遅延開始問題
-
05-07-2019 - |
質問
ねえ、私はSpringとHibernateを使用してデスクトップアプリケーションを開発していますが、遅延開始に問題があります。 Webで調べたところ、すべてのソリューションはオープンセッションのビューパターンに関連していますが、このパターンを使用することはできません。また、 HibernateTemplate
から sessionfactory
を取得しようとしましたが、切断されたセッションが返されます。
他のソリューションを知っている人はいますか
解決
基本的に2つの解決策があることをお勧めします。
-
遅延初期化されたオブジェクトまたはコレクションにアクセスするときに、Hibernateセッションを開いたままにするように手配します。つまり、「ビュー内のセッションを開く」のように、コード内のトランザクション境界を慎重にマークする必要があります。パターン。 Springはこれを可能にしますが、デスクトップアプリケーションでは、トランザクション境界がもう少しはっきりしているWebアプリケーションほど簡単ではありません。
-
Hibernateの永続オブジェクトのすべての遅延初期化をオフにします。
オプション2は多くの不必要なデータベースアクセスにつながる可能性があり、オプション1はワークフローとユースケースを真剣に研究する必要があることを意味します。
役立つことを願っています!
他のヒント
1つのオプションは、エンティティまたはコレクションでHibernate.initialize()を呼び出して、それらを強制的に初期化することです。データをビューに戻す前に、これを実行する必要があります。これはデータベースに多くのSQLステートメントを生成するため、慎重に検討します。
" fetch"の使用を検討することができます。 HQLクエリまたはフェッチモードを「熱心」に設定します。マッピングで(JPAのFetchMode.EAGERまたはhbm.xmlのlazy =" false"であると思います)。
@Jose:独自のThreadLocalでセッションを管理しないでください。 SessionFactory.getCurrentSession()を使用し、「スレッド」を使用するようにHibernateを設定します。 SessionContext。
非常によく似た問題があり、本当に適切な解決策を見つけることができなかったためです。ウェブ上で見つかったさまざまなアプローチを組み合わせて自分のブログを作成し、ブログに投稿しました。
申し訳ありませんが、ここにすべてを記載するわけではありませんが、この問題や同様の問題を抱えている人を見つけたすべてのフォーラムで何度も何度も行うのは大変なことです