図1に示すように、データベース(の封鎖https://www.cnblogs.com/zhai1997/p/11710082.html)。
遮断は、同時実行制御のための重要な技術です。
コミットされていないお読みください。読み取られたデータが送信されていません
コミット読み取り:、すでに提出されたデータを読み出すためにダーティリード、Oracleのデフォルトのレベルを解決することができます。
反復可能読み取り:再読み込みを読んで、汚い読み込み、非反復可能読み取り、MySQLのデフォルトのレベルを解決することができます。
直列化可能:直列化、解決することができる汚れは、データベースの低効率を行います、読み込み、非反復可能読み取りテーブルをロックする同等の損失を、変更します。
2、Hibernateの分離レベルときに、データベースの操作:
1:READ UNCOMMITTED
2:リードコミッティ
4:反復可能読み取り
8:シリアライズ
分離レベルの設定:
<プロパティ名= " hibernate.connection.isolation " > 4 </プロパティ>
3、トランザクション処理:
取引の過程で、最も重要な問題は、DAO層とサービス層操作は同じ1セッションオブジェクトであることを確認することで、Hibernateは、我々は唯一の適切なメソッドを呼び出す必要があります。
注意事項:
このメソッドが自動的にオフになりますトランザクションを提出した後、呼び出されますので、(1)は、手動でクローズ取引に必要はありません。
(2)メソッドを呼び出す前に設定する必要があります。
<! -指定現在のスレッドバインディングとのセッション- > <プロパティ名= 「hibernate.current_session_context_class 」 >スレッド</プロパティ>
パブリック 静的 ボイドtestSel(){ セッションセッション = HibernateUtils.openSession()。 トランザクショントランザクション = session.beginTransaction(); セッションセッション1 = HibernateUtils.openSession()。 セッションセッション2 = HibernateUtils.openSession()。 システム。アウト .println(セッション1 == セッション2)。 セッションセッション3 = HibernateUtils.getCurrentSession()。 セッションセッション4 = HibernateUtils.getCurrentSession()。 システム。でる.println(セッション3 == セッション4); transaction.commit(); Session.close(); // フリー状態 }