这也就是说我们一开始从SessionFactory获得的session其自动提交属性就已经被关闭(AutoCommit=false)下面的代码将不会对数据库产生任何效果
Java代码
session = sessionFactory
openSession();
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的正确代码这里就会产生问题
[] [] [] [] []