トランザクションと同時実行

1220 ワード

1.セッションとトランザクション範囲
 
  • sessionfactoryオブジェクトの作成にはコストがかかり、スレッドが安全なオブジェクトです.すべてのアプリケーション・スレッドを共有します.アプリケーションが起動したときにconfiguraionのインスタンスによって作成されるのは、一度だけ作成されます.
  • sessionオブジェクトの作成コストは比較的小さく、非スレッドセキュリティであり、単一のリクエスト、単一のセッション、単一の作業ユニットでは1回しか使用されず、破棄されます.必要に応じて、1つのセッションオブジェクトのみがJDBCのconnectionオブジェクトを取得するため、使用しない場合はリソースを消費しません.

  • 2.hibernateでのトランザクションの使用
     
    JDBC自体は設計時、トランザクション機能を備えておらず、hibernateはJDBCを軽量級にカプセル化している.hibernateは、下位のJDBCtransactionまたはJTATransactionをカプセル化し、TransactionとSessionのハウジングを外に被せ、実際には下位のJDBCまたはJTAに依頼することでトランザクション機能を実現します.
     
  • hibernateでトランザクションを使用するには
  • (1)次のようにトランザクションの開発を宣言します.
     
    Transaction t=session.beginTransaction();
    t.commit();
    t.rollback(); 

    (2)hibernateでのJDBCトランザクションの使用
    hibernateはセッション制御の下、データベース接続を確立すると、すぐに自動コミットモードをキャンセルします.すなわち、hibernateはセッションのbeginTransaction()メソッドを実行した後、JDBCレイヤのsettAutoCommit(false)メソッドを自動的に呼び出します.
    (3)hibernateでのJTAトランザクションの使用
    JTAには、UserTransactionインタフェース、TransactionManagerインタフェース、Transactionインタフェースの3つのインタフェースがあります.複数のデータベースを持つシステムでは、1つのプログラムがいくつかのデータベースのデータを呼び出す可能性があります.分散トランザクションが必要な場合や、Sessionにまたがる長いトランザクションをJTAで管理する準備ができている場合は、JTAトランザクションを使用する必要があります.