j2ee中的事务处理
来源:互联网 发布:caffe cudnn 版本 编辑:程序博客网 时间:2024/05/20 15:41
事务处理应由业务层负责,不应由dao层负责。应该怎么做呢?
先看dao,有这样一个方法
public List findByUser(Session sess, User user, int pageNo){
return sess.createQuery("from Photo p where p.user = :user")
.setEntity("user", user)
.setMaxResults(PAGE_SIZE)
.setFirstResult(PAGE_SIZE * (pageNo - 1))
.list();
}
在这里,并没有open Session,而是把Session作为方法的参数传来,再调用查询方法.
再看业务层是怎么写的.
public List<PhotoHolder> getPhotoByUser(String user, int pageNo){
Session s = HibernateUtil.currentSession();
Transaction tx = s.beginTransaction();
//调用DAO方法返回指定用户、指定页的所有Photo
List pl = pd.findByUser(s, ud.findByName(s, user), pageNo);
//将查询结果封装成集合后返回
List<PhotoHolder> result = new ArrayList<PhotoHolder>();
//遍历查询结果
for (Object o : pl ){
Photo p = (Photo)o;
result.add(new PhotoHolder(p.getTitle(), p.getFileName()));
}
tx.commit();
HibernateUtil.closeSession();
return result;
}
在业务层方法中,再open session,再beginTransaction().
为什么事务处理要由业务逻辑层负责呢?
使用Hibernate进行数据库访问时,事务是通过Session开始的,如果Session在DAO方法中打开,则事务
控制降低到DAO层次,对单个的DAO方法增加事务控制是没有意义的(考虑这样一个场景:从A账户向B账户转账,
A账户的余额减少是一个DAO操作,如果事务控制在DAO层次上,A账户的余额减少是具有原子性的,但可能A账户
的余额减少了,但B账户的余额没有增加,这将导致数据的不一致)。事务应该对整个业务逻辑操作起作用,也就
是说,事务应该在整个业务逻辑层次上,绝不能降低到DAO层次上。
- j2ee中的事务处理
- J2EE -- 数据库事务处理的实现
- Java中的事务处理
- Java中的事务处理
- Java中的事务处理
- Java中的事务处理
- Spring 中的事务处理
- C#中的事务处理
- 应用系统中的事务处理
- Sqlserver2000中的事务处理
- c#中的事务处理
- 软件开发中的事务处理
- 数据库中的事务处理介绍
- C# 中的事务处理
- Java中的事务处理
- c#中的事务处理
- WebLogic Server中的事务处理
- C#中的事务处理
- 七宗罪与程序员
- .NET 常用快揭键小列
- java冒泡排序
- ASP.NET下如何防范SQL注入式攻击
- 实用开发一:c#封装好的处理图片的水印和生成缩略图的类
- j2ee中的事务处理
- 一款不错的超文本编辑器,国人开发!
- 一个下载外语教程的好地方
- 全面接触Java集合框架
- 伟大的中国很落后
- Linux必学的系统管理命令
- ASP.NET2.0连接SQL Server数据库详解
- 实用开发二:ajax实现页面无刷新加载另一个页面的内容
- 用户可操作性提高的方法