繁体   English   中英

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

[英]How to manage 2 DAO methods in a single transaction in Java Spring and Hibernate?

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

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

谢谢! :)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM