数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Hibernate 基于JDBC的事务[1]


发布日期:2018年06月26日
 
Hibernate 基于JDBC的事务[1]

Hibernate 是JDBC 的轻量级封装本身并不具备事务管理能力在事务管理层Hibernate将其委托给底层的JDBC或者JTA以实现事务管理和调度功能

Hibernate的默认事务处理机制基于JDBC Transaction我们也可以通过配置文件设定采用JTA作为事务管理实现

Java代码

<hibernateconfiguration>

<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 = sessionFactoryopenSession();

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属性进行修改)

[] [] [] [] []

               

上一篇:用Spring的JdbcTemplate实现分页功能

下一篇:Hibernate 基于JDBC的事务[5]