2

Hibernate: 一時オブジェクトが休止状態セッションに追加された場合、セッションを閉じたときに (ダーティ チェックの後) 休止状態で永続化できないのはなぜですか。

利用可能なそのような種類のオプションはありますか。また、そのようなオプションが存在する場合、なぜトランザクションを開始し、それをコミットすると言っているのか。(session.beginTransaction() )

session.close() と言うと、 transaction.commit() が実行できる機能は何ですか? 親切にこれについて私に説明してください。

4

2 に答える 2

3

RDBMS を正しく使用するには、トランザクションの境界設定が不可欠です。そのため、Hibernate でトランザクションを開始してコミットする必要があります。

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

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

于 2012-04-16T10:49:47.543 に答える
1

session.beginTransaction は、INSERT、SELECT、DELETE などの 1 つ以上の大雑把な操作で構成される可能性のあるトランザクションを開始するために使用されます。一方、transaction.commit() は、トランザクション中に発生したすべての変更をコミットするために使用されるため、データベースはその後一貫した状態に保たれます。オペレーション。

于 2012-04-16T10:53:52.867 に答える