web-dev-qa-db-ja.com

Spring Hibernateテンプレートを使用するタイミングと理由

ご挨拶、現在、Webサービスからの応答(CXF + Springを使用)が処理され、データベースに保存される小さなWebサービスアプリケーションを開発しています。データベースを操作するには、Hibernate(3.5)を使用しています。 WebでHibernate + Springの例を参照すると、HibernateTemplateの使用方法がよく表示されるため、この瞬間について少し混乱しているため、質問したいと思いました。

Hibernate3アプリケーションでHibernateTemplateを使用していますか? HibernateTemplateはいつ開発ライフを改善でき、どのポイントに基づいて使用する必要があるかどうかを判断できますか?

ありがとう。

47
artjomka

すべてのスプリングテンプレート(hibernate、jdbc、rest、jpaなど)には同じ長所と短所があります。

Pro:これらは、一般的なセットアップルーチンを実行し、定型文をスキップして、必要なロジックに集中できるようにします。

Con:アプリケーションをスプリングフレームワークにしっかりと結合しています。このため、SpringはHibernateTemplateを使用しないことを推奨しています。

具体的には、HibernateTemplateがあなたのためにしたことは、コードの実行後にセッションを自動的に開閉し、トランザクションをコミットまたはロールバックすることでした。ただし、これはすべて、Springの Declarative Transaction Management を使用して、アスペクト指向の方法で実現できます。

参照:


更新:

Spring 3.1(およびそれ以降のバージョン)の時点で、 HibernateTemplateは削除されました 。現在推奨されている使用パターンについては、 Hibernate を参照してください。

52

SpringのHibernateTemplateは今後サポートされないことを1つ明確にしましょう。つまり、Hibernate 4+バージョンはHibernateTemplateをサポートしません。したがって、Seanが示唆するように、 declarative transaction management を使用することをお勧めします。

11
Maulik Kayastha

HibernateTemplateは、生活を楽にするために多くのものをカプセル化します。

それを使用するかどうかはあなたの選択です。さらに言えば、Hibernateなしでデータベースを操作できます。 SpringのJDBCのものは非常に優れています。 Hibernateを習得しなくても問題を簡単に解決できる場合があります。

5
duffymo

OpenSessionInViewFilterパターンは有効です。これにより、すべてのリクエストの処理中にHibernateセッションが開き、スレッドにバインドされます。 OpenSessionInViewは、セッションとロード可能性をビューのレンダリングとビューレイヤーにも拡張し、結合と複雑さを軽減します(「機能する」ようにすることで)。

私の哲学は、アスペクトベース/宣言的トランザクション管理に本当に同意しません。主要な状態変更/ライフサイクルイベントを「明示的」にしたいのは、それらが完全に明確である必要があるためです。

デバッグするポイントを提供します。

TXコミットは1行のコードのみです。しかし、それはあなたがブレークポイントにしたい主要なものです。 「トランザクション」宣言よりも、構文的にはもはやありません。しかし、はるかに明確な地獄。

率直に言って、トランザクションを開始し、トランザクション性を制御する適切な場所である「ユーザーコマンド」または「リクエスト」は、アプリケーション内で適切に構造化され、明確に識別され、かなり明確である必要があります。

(アスペクトクラスのロード機能を動作させるのに苦労しました。最初に出たときに試してみました。私の評価では、よく書かれたOO =コード、アスペクトの限界値は限られています。)

ヒント:通常はヘルパークラスを作成し、実際にセッションを取得してトランザクションをコミットするのに便利です

HbHelperなど。

1
Thomas W

すべてのテンプレートは今後廃止されます。 JPAの標準であるエンティティマネージャーを使用することをお勧めします。