`

实战事务处理-适用于使用hibernate作持久层的系统

阅读更多

遗留系统采用了struts和hibernate,层次划分是很常见的表现层、service层、DAO层。

 

目前遗留系统有个事务处理的问题。代码在事务处理上面不统一:有的放在DAO层,有的在service层,各位看官肯定要说,这都没有统一吗,简直一堆狗屎。不错,我也觉得臭的受不了,所以采用了个简单的办法,真的很简单,呵呵。

 

其实如果事务处理的合理,事务处理放在哪一层倒是都可以。对于划分出服务层的系统来说,事务放在DAO处理会造成service层成为一个鸡肋的层次。关键是遗留系统处理service层事务的代码有问题:假设一个service方法包含了2个DAO的操作,且看有的代码:

 

Service方法:

Public void serviceMethod(){

  dao.method1();
  dao.method2();

}

 

 

DAO方法:
Public void method1(){
  Session session = HibernateUtil.currentSession();
  session.beginTransaction();
  ....
 session.getTransaction().commit();

}

 

 

Public void method2(){

  Session session = HibernateUtil.currentSession();
  session.beginTransaction();
  ....
  session.getTransaction().commit();

}

 

 

显然写代码的人认为service层的2个方法是一个事务单元,可是如此处理的结果:method1和method2却是执行在两个事务中,很显然这样处理是错误的。

 

个人认为,以下方法适用于hibernate做持久化处理的系统。当然,在此基础上稍做修改,也适用于直接应用JDBC或者其他持久层框架的系统。


 

Service方法:

Public void serviceMethod(){

  Session session = HibernateUtils.getCurrentSession();

  Transaction tx = session.beginTransaction();

 

  dao.method1();

  dao.method2();

 

  tx.commit();

}

 

 

DAO方法:

Public void method1(){

  Session session = HibernateUtils.getCurrentSession();

  session.save(po1);

}

 

Public void method2(){

  Session session = HibernateUtils.getCurrentSession();

  session.update(po2);

}

 

分享到:
评论

相关推荐

    Hibernate实战(第2版 中文高清版)

     1.3 持久层和其他层 显示全部信息第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象...

    深入浅出Hibernate中文版 part1

    5.1 Hibernate持久化实现 5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 第6章 Hibernate 实战——创建RedSaga论坛 6.1 目标 6.2 E-R建模还是对象建模 6.3 E-R建模及工具集 6.4 对象建模 6.5 项目的...

    深入浅出Hibernate中文版 part2

    5.1 Hibernate持久化实现 5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 第6章 Hibernate 实战——创建RedSaga论坛 6.1 目标 6.2 E-R建模还是对象建模 6.3 E-R建模及工具集 6.4 对象建模 6.5 项目的...

    Spring3.x企业应用开发实战(完整版) part1

    2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 2.5.1 配置Spring MVC框架 2.5.2 ...

    Spring.3.x企业应用开发实战(完整版).part2

    2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 2.5.1 配置Spring MVC框架 2.5.2 ...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    该案例采用目前最流行、最规范的java ee架构,整个应用分为jpa实体层、eao层、业务逻辑层、mvc层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。该案例既提供了ide无关的、基于ant管理的项目源码...

    iBATIS实战

    7.6.2 将事务在持久层划界 128 7.6.3 将事务在业务逻辑层划界 128 7.7 小结 129 第8章 使用动态SQL 130 8.1 处理动态WHERE子句条件 130 8.2 熟悉动态标签 132 8.2.1 dynamic标签 134 8.2.2 二元标签 135 8.2.3 一元...

    Java数据库技术详解 DOC简版

    1.4 数据持久层 1.5 本章小结 第2章 SQL语句基础之DDL 2.1 DDL基础 2.2 DDL操作视图 2.3 本章小结 第3章 SQL语句基础之DML 3.1 SELECT语句基础 3.2 WHERE子句 3.3 ORDER BY子句 3.4 GROUP BY和...

    springmybatis

    MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan ...

Global site tag (gtag.js) - Google Analytics