Hibernate 是JDBC 的轻量级封装本身并不具备事务管理能力在事务管理层Hibernate将其委托给底层的JDBC或者JTA以实现事务管理和调度功能
Hibernate的默认事务处理机制基于JDBC Transaction我们也可以通过配置文件设定采用JTA作为事务管理实现
Java代码
<hibernate
configuration>
<sessionfactory>
……
<property name=hibernatetransactionfactory_class>
netsfhibernatetransactionJTATransactionFactory
<!netsfhibernatetransactionJDBCTransactionFactory>
</property>
……
</sessionfactory>
</hibernateconfiguration>
<hibernateconfiguration>
<sessionfactory>
……
<property name=hibernatetransactionfactory_class>
netsfhibernatetransactionJTATransactionFactory
<!netsfhibernatetransactionJDBCTransactionFactory>
</property>
……
</sessionfactory>
</hibernateconfiguration>
基于JDBC的事务管理将事务管理委托给JDBC 进行处理无疑是最简单的实现方式Hibernate 对于JDBC事务的封装也极为简单
我们来看下面这段代码
Java代码
session = sessionFactory
openSession();
Transaction tx = sessionbeginTransaction();
……
txcommit();
session = sessionFactoryopenSession();
Transaction tx = sessionbeginTransaction();
……
txcommit();
从JDBC层面而言上面的代码实际上对应着
Java代码
Connection dbconn = getConnection();
dbconnsetAutoCommit(false);
……
dbconncommit();
Connection dbconn = getConnection();
dbconnsetAutoCommit(false);
……
dbconncommit();
就是这么简单Hibernate并没有做更多的事情(实际上也没法做更多的事情)只是将这样的JDBC代码进行了封装而已
这里要注意的是在sessionFactoryopenSession()中hibernate会初始化数据库连接与此同时将其AutoCommit 设为关闭状态(false)而其后在SessionbeginTransaction 方法中Hibernate 会再次确认Connection 的AutoCommit 属性被设为关闭状态( 为了防止用户代码对session 的ConnectionAutoCommit属性进行修改)
[] [] [] [] []