Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102460
  • 博文数量: 51
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 580
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-05 16:28
文章分类

全部博文(51)

文章存档

2009年(51)

我的朋友

分类:

2009-01-14 09:33:34

这也就是说,我们一开始从SessionFactory获得的session,其自动提交属性就
已经被关闭(AutoCommit=false),下面的代码将不会对数据库产生任何效果:
session = sessionFactory.openSession();
session.save(user);
session.close();
这实际上相当于 JDBC Connection的AutoCommit属性被设为false,执行了若
干JDBC操作之后,没有调用commit操作即将Connection关闭。
如果要使代码真正作用到数据库,我们必须显式的调用Transaction指令:
session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();
 
JTA 提供了跨Session 的事务管理能力。这一点是与JDBC Transaction 最大的
差异。
JDBC事务由Connnection管理,也就是说,事务管理实际上是在JDBC Connection
中实现。事务周期限于Connection的生命周期之类。同样,对于基于JDBC Transaction
的Hibernate 事务管理机制而言,事务管理在Session 所依托的JDBC Connection
中实现,事务周期限于Session的生命周期。
 
程序一:
public class ClassC{
public void save(){
……
UserTransaction tx = new InitialContext().lookup(“……”);
classA.save(user);
classB.save(order);
tx.commit();
……
}
}
 
程序二:
public class ClassC{
public void save(){
……
session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
classA.save(user);
classB.save(order);
tx.commit();
 
实际上,程序二是通过Hibernate来完成启动和提交UserTransaction的功能,但这
样的做法比程序一直接通过InitialContext获取UserTransaction 的做法消耗了更多
的资源,得不偿失。
……
}
}
 
阅读(728) | 评论(0) | 转发(0) |
0

上一篇:Md5加密简介

下一篇:负载均衡

给主人留下些什么吧!~~