事务是定义在业务层,dao中不管用什么事务都会生效,不会出现问题,除非没加到事务中。

解决方案 »

  1.   

    不好意思,我把意思说错了。不是事务失效了。
    实际上是这样的,在 service层的同一个方法里面:
    我使用 createQuery加载了一条数据,然后 update了这条数据。
    然后再使用 createSQLQuery查询这条数据,并输出到控制台。
    结果发现查询出来的这条数据是 update之前的状态。
    原因可能是 SQLQuery是直接从物理数据库中取数据,而不是从 hibernate缓存中取数据。
    这样 SQLQuery是不是就不能用在这个事务里面了呢?
      

  2.   

    update执行完毕后,只是把记录添加到了缓存里和一个updates的集合里,并没有完成真正的数据库更新操作你可以采用两种方式完成update操作1 事务提交之后再进行createSQLQuery2 update调用之后,后面加上session.flush();然后再createSQLQuery
      

  3.   

    1 事务提交之后再进行createSQLQuery 
      系统有一个实现了很多查询方法的 BaseDao,其中 Query和 SQLQuery都是混着用的。
      我很难限制程序员在同一个事物里能用哪些方法和不能用哪些方法。2 update调用之后,后面加上session.flush();然后再createSQLQuery
      这样做事务就真的没用了吧?感谢 Landor2004 的帮助,下班前结贴。
      

  4.   

    实现机制就是这样,update之后再用session.flush(),事务是仍然有效的!