dav*_*ine 8 java xml hibernate
在我的hibernate.cfg.xml文件中,其中一个属性是 -
<property name = "transaction.factory_class"> <!--1-->
org.hibernate.transaction.JDBCTransactionFactory <!--2-->
</property> <!--3-->
Run Code Online (Sandbox Code Playgroud)
其他属性很容易理解.但是,当我看到上述财产时,我脑子里浮现出许多问题.
第1行 -它指定实现Transaction*Factory*接口的类.
Q1 -我看过TransactionFactory的java文档,但不明白它到底是什么.这个"工厂"是什么意思?他们为什么不把它称为TransactionGenerator -
生成Hibernate Transaction实例的合同.
Q2 - TransactionFactory引导我进行交易.这与数据库事务完全相同吗?
第3季 -
单个会话可能跨越多个事务,因为会话的概念(应用程序和数据存储区之间的对话)的粒度比事务的概念更粗略.但是,打算在任何时候最多有一个与特定会话相关联的未提交的事务.
......会话的概念比交易的概念更粗略.
这用简单的词语意味着什么?
-
但是,打算在任何时候最多有一个与特定会话相关联的未提交的事务.
你为什么打算这个?
我不认为API文档是清楚的.使n00b生活变得悲惨.
Q1 - 推理很清楚.事务创建遵循工厂模式.例如,在应用程序服务器(如JBOSS,WebSphere等)通过JTA API管理事务创建的环境中,您将使用JTA事务工厂来创建事务,并且hibernate将进一步使用该事务.在纯粹的Spring托管环境中,Spring可以配置为使用HibernateTransactionFactory.简而言之,它将遵循类似的方式:
IFactory f= FactoryCreatorForYourEnvironment.create();
Transaction t = f.create();
Run Code Online (Sandbox Code Playgroud)
Q2和Q3 - 是的,hibernate事务工厂在底层数据库上创建数据库事务.请注意,会话可能跨越多个事务 - 休眠会话抽象数据库连接.在同一连接上,可以进行多个begin transaction,commit transaction循环.示例:REQUIRE_NEW属性,如果参与的bean(EJB或SPRING bean).因此,会话是文档中提到的更广泛(更粗糙)的术语.
任何写入,删除,受保护的读取都需要事务.因此会话持有隐式事务.您可以在此处阅读相关的堆栈溢出文章.
HTH.
归档时间: |
|
查看次数: |
9197 次 |
最近记录: |