2013-04-17 9 views
6

のtransaction.factory_classを理解する必要があり、特性の一つである -は私のhibernate.cfg.xmlファイルではHibernate設定

<property name = "transaction.factory_class"> <!--1--> 
org.hibernate.transaction.JDBCTransactionFactory <!--2--> 
</property> <!--3--> 

他の特性は理解しやすいです。しかし、私が上記の特性を見たとき、多くの疑問が私の頭に浮かんだ。

行1 -これは、トランザクション* ファクトリ *インタフェースを実装するクラスを指定します。

1 -私はTransactionFactory用のJavaドキュメントを見ましたが、実際の内容を理解できませんでした。この「ファクトリ」はどういう意味ですか?どうして彼らは、トランザクション・ジェネレータを行ごとに呼び出さないのですか?

Hibernate Transactionインスタンスの生成に関する契約。

Q2 - TransactionFactoryはトランザクションにつながります。これはデータベーストランザクションとまったく同じですか?

Q3 -

単一セッションが の概念セッションので(アプリケーションとデータストアとの間の会話)を複数のトランザクションにまたがる可能性があるが、トランザクションの概念よりも粗い細分性です。しかし、 は、いつでも特定のセッションに関連付けられたコミットされていないトランザクション が最大で1つ存在することが意図されています。

...セッションの概念は、トランザクションの概念よりも粗い粒度です。

単純な言葉ではどういう意味ですか?

-

しかし、特定のセッションに関連付けられた最大1つのコミットされていない 取引はいつでもそこにあることが意図されています。

どういう意図ですか?

私はAPIのドキュメントが明確ではないと思います。 n00bの人生を悲惨なものにします。

答えて

5

- 理由は明らかです。トランザクションの作成は、工場パターンに従って行われます。たとえば、アプリケーションサーバー(JBOSS、WebSphereなど)がJTA APIを使用してトランザクション作成を管理する環境では、JTAトランザクションファクトリを使用してトランザクションを作成し、そのトランザクションをさらに休止状態で使用します。純粋にSpring管理環境では、SpringはHibernateTransactionFactoryを使用するように設定できます。要するに、それはと同様の方法に従うであろう:

IFactory f= FactoryCreatorForYourEnvironment.create(); 
Transaction t = f.create(); 

Q2及びQ3 - はい、Hibernateのトランザクション・ファクトリは、基礎となるDBにデータベーストランザクションを作成します。セッションは複数のトランザクションにまたがっている可能性があることに注意してください。休止状態のセッションはデータベース接続を抽象化します。同じ接続で複数のbegin transaction、commit transactionサイクルが可能です。例:参加するBean(EJBまたはSPRING Bean)のREQUIRE_NEWプロパティー。したがって、セッションでは、ドキュメントに記載されているように、より広い(粗い)用語です。

書き込み、削除、保護された読み取りにはトランザクションが必要です。したがって、セッションは暗黙のトランザクションを保持します。関連するスタックオーバーフローの記事hereを読むことができます。

HTH。

関連する問題