如何在Java Spring和Hibernate中的单个事务中管理2个DAO方法?

时间:2015-10-24 17:28:11

标签: java hibernate spring-mvc dao transactional

我正在构建一个新的动态网站,我在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()的事务会成功执行而不会回滚!

如何在单个交易中管理这两种方法?我会分开这两个操作......

谢谢! :)

1 个答案:

答案 0 :(得分:4)

您需要使用@Transactional从另一种方法调用DAO方法。

然后将在DAO方法之外创建事务,它们将使用现有事务(由于默认传播)而不是创建自己的新事务。