我正在构建一个新的动态网站,我在Spring MVC中创建了2个DAO类来管理2个不同表中的查询。 我需要知道如何使用Hibernate在单个事务中管理2个DAO方法...实际上,我创建了2个DAO Java类和相关的实现类:
第一个DAO类(FirstDAOImpl.java):
@Transactional(readOnly = false, rollbackFor=Exception.class)
public void insertUser(User user)
{
//do insert an user using hibernate...
}
第二个DAO类(SecondDAOImpl.java):
@Transactional(rollbackFor=Exception.class)
public void insertUserRole(UserRole register)
{
//do insert user role using hibernate...
}
在我的Spring控制器中,我需要在单个事务中调用两个DAO方法......
实际上,我对任何DAO方法都有一个新的事务方法:
@RequestMapping(value = "/new-user", method = RequestMethod.POST)
public String insertNewUser(Model model)
{
//Other code
try
{
firstDAO.insertUser(myUserObject);
secondDAO.insertUserRole(myUserRoleObject);
}
catch(Exception e)
{
logger.info("exception!");
}
//Other code
}
当插入新记录的方法insertUserRole()
失败时,前一个方法insertUser()
的事务会成功执行而不会回滚!
如何在单个交易中管理这两种方法?我会分开这两个操作......
谢谢! :)
答案 0 :(得分:4)
您需要使用@Transactional
从另一种方法调用DAO方法。
然后将在DAO方法之外创建事务,它们将使用现有事务(由于默认传播)而不是创建自己的新事务。