我有一个服务,它使用多个DAO来完成一个工作单元,如下所示。 DAO通过创建会话和提交来获取数据/保存。在这种情况下,当dao自己管理会话时,为什么我需要在服务上进行事务处理?如果第二个DAO出现问题,第一个DAO中的数据已经提交,我该如何解决这种情况?
@Transactional
public boolean testService(SomeObject obj){
userDao.save(obj.getUser()); // this dao gets the session from sessino factory and commits there itself.
addressDao.save(obj.getAddress()); // something fails here, and the above line has already commited the data, so the data is not Atomic.
return true;
}
答案 0 :(得分:3)
通常,您不要将@Transactional
放在DAO图层中,而是放在服务层中。
因此,我建议您从您的DAO中移除@Transactional
,并将其保留在您的服务中。
在这种情况下,如果你的任何DAO出现问题,一切都会回滚。
但是,您可以根据自己的需要开始和完成交易。