2012-04-16 11 views
0

Hibernate: 一時オブジェクトがHibernateセッションに追加された場合、セッションを閉じるときに休止状態にできません(ダーティチェック後)。なぜsession.beginTransactionとtransaction.commitを使用するのですか

このような種類のオプションがありますか? また、そのようなオプションが存在する場合、コミットすることをトランザクション&が開始するのはなぜですか。 (session.beginTransaction())

session.close()と言うと、transaction.commit()はどのような機能を果たすことができますか? 親切にも、これについて私に説明してください。

答えて

3

Transaction demarcationは、RDBMSを正しく使用する上で不可欠です。そのため、Hibernateとのトランザクションを開始しコミットする必要があります。

あなたの質問に関しては、セッションを閉じるときに暗黙的にトランザクションを閉じることはできませんが、トランザクションを閉じるとすぐにセッションを閉じるという一般的な方法があります。 Hibernateはcontextual sessionsの形式でこのパターンを特別にサポートしています。

いくつかのフレームワーク(Spring、EJBなど)は、プログラムでトランザクションを開始およびコミットする必要がなくなるため、メソッドをトランザクション宣言的にマークすることができる宣言型トランザクションアプローチを提供します。つまり、コンテキスト・セッション(必要な場合)を開き、そのようなメソッドを入力するとトランザクションを開始し、トランザクションをコミットし、トランザクションから戻ったときにセッションを閉じます(必要な場合)。

0

session.beginTransactionは、INSERT、SELECT、DELETEなどの1つ以上の粗操作からなるトランザクションを開始するために使用されます。 transaction.commit()は、トランザクション中に発生したすべての変更をコミットするために使用されます。操作後は一貫性のある状態を保ちます。

関連する問題