首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate保存,Hibernate回滚

Hibernate保存,Hibernate回滚
EN

Stack Overflow用户
提问于 2011-10-27 08:30:23
回答 2查看 1.8K关注 0票数 1

我正试着让我的刀这样工作:

代码语言:javascript
运行
复制
    public void incrementNumber(long id) throws Exception{
        Session session = factory.openSession();
        Number n = (Number)session.load(Number.class, id);
        n.setNumber(n.getNumber() +5);
//      throw new IllegalArgumentException("BLAH");
        session.close();
    }

  1. 通过注释掉异常,更新将提交.
  2. (?)异常情况下,它将回滚.

有办法做到这一点吗?注意:事务部分是在服务中在事务性注释下完成的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-27 09:21:58

DAO主要负责持久化操作,.It应该只提供CRUD和一些与特定实体相关的查找器方法。

IMO,您的方法更像是业务操作,而不是持久化操作。由于您有服务层,我建议您将此方法移到它上。

因此,您的NumberDAO可能如下所示:

代码语言:javascript
运行
复制
public class NumberDAO {

     public Number loadById(long id){ }

}

你的NumberService看起来可能是这样的:

代码语言:javascript
运行
复制
public class NumberService{

        //Inject by DI containers , or setter / constructor
        NumberDAO numberDAO;

         public void incrementNumber(long id , int increaseAmount) throws Exception{

                Number n = (Number) numberDAO.loadById(id);

                if (XXXXXXXX) 
                    throws new IllegalArgumentException("BLAH BLAH BLAH BLAH");

                n.setNumber(n.getNumber() +increaseAmount);
         }

}

当您在服务层中使用事务性注释时,如果您的服务方法在方法返回之前成功返回任何异常抛出的.In大小写,它将自动提交,事务将自动回滚。

票数 1
EN

Stack Overflow用户

发布于 2018-07-12 13:02:28

提交并不总是提交到db,而是在会话缓存中设置必须提交,然后当您执行刷新(也取决于配置)时,提交将转到DB,或者当会话/事务结束时。

因此,如果要强制执行,请在提交后使用flush()。如果可以等待,请在会话/事务关闭后进行检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7913423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档