我正试着让我的刀这样工作:
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();
}
有办法做到这一点吗?注意:事务部分是在服务中在事务性注释下完成的。
发布于 2011-10-27 09:21:58
DAO主要负责持久化操作,.It应该只提供CRUD和一些与特定实体相关的查找器方法。
IMO,您的方法更像是业务操作,而不是持久化操作。由于您有服务层,我建议您将此方法移到它上。
因此,您的NumberDAO可能如下所示:
public class NumberDAO {
public Number loadById(long id){ }
}
你的NumberService看起来可能是这样的:
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大小写,它将自动提交,事务将自动回滚。
发布于 2018-07-12 13:02:28
提交并不总是提交到db,而是在会话缓存中设置必须提交,然后当您执行刷新(也取决于配置)时,提交将转到DB,或者当会话/事务结束时。
因此,如果要强制执行,请在提交后使用flush()。如果可以等待,请在会话/事务关闭后进行检查。
https://stackoverflow.com/questions/7913423
复制相似问题