数据库

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

Hibernate 基于JDBC的事务[2]


发布日期:2023年02月24日
 
Hibernate 基于JDBC的事务[2]

这也就是说我们一开始从SessionFactory获得的session其自动提交属性就已经被关闭(AutoCommit=false)下面的代码将不会对数据库产生任何效果

Java代码

session = sessionFactoryopenSession();

sessionsave(user);

sessionclose();

session = sessionFactoryopenSession();

sessionsave(user);

sessionclose();

这实际上相当于 JDBC Connection的AutoCommit属性被设为false执行了若干JDBC操作之后没有调用commit操作即将Connection关闭如果要使代码真正作用到数据库我们必须显式的调用Transaction指令

Java代码

session = sessionFactoryopenSession();

Transaction tx = sessionbeginTransaction();

sessionsave(user);

txcommit(); &n

bsp;

sessionclose();

session = sessionFactoryopenSession();

Transaction tx = sessionbeginTransaction();

sessionsave(user);

txcommit();

sessionclose();

基于JTA的事务管理

JTA 提供了跨Session 的事务管理能力这一点是与JDBC Transaction 最大的差异

JDBC事务由Connnection管理也就是说事务管理实际上是在JDBC Connection中实现事务周期限于Connection的生命周期之类同样对于基于JDBC Transaction的Hibernate 事务管理机制而言事务管理在Session 所依托的JDBC Connection中实现事务周期限于Session的生命周期

JTA 事务管理则由 JTA 容器实现JTA 容器对当前加入事务的众多Connection 进 行调度实现其事务性要求JTA的事务周期可横跨多个JDBC Connection生命周期同样对于基于JTA事务的Hibernate而言JTA事务横跨可横跨多个Session

JTA 事务是由JTA Container 维护而参与事务的Connection无需对事务管理进行干涉这也就是说如果采用JTA Transaction我们不应该再调用HibernateTransaction功能 上面基于JDBC Transaction的正确代码这里就会产生问题

[] [] [] [] []

               

上一篇:Hibernate 基于JDBC的事务[3]

下一篇:spring中的jdbc访问类JdbcTemplate使用