【问题标题】:How to manage 2 DAO methods in a single transaction in Java Spring and Hibernate?java - 如何在Java Spring和Hibernate的单个事务中管理2个DAO方法?
【发布时间】:2016-01-24 02:25:03
【问题描述】:

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

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

谢谢! :)

【问题讨论】:

    标签: java hibernate spring-mvc dao transactional


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!!你能用一个简单的代码解释你的帖子吗? :)
    • 嗯,当然...@Transactional void myMethod() { dao1.method(); dao2.method(); }。修改以满足您的需求,并阅读交易。它们既棘手又非常重要。
    • 非常感谢! :) 一件事:dao1 和 dao2 方法也应该是事务性的?
    • 这完全取决于您打算如何使用它们。这就是为什么我说read up on transactions。它们不是一件简单的事情。
    猜你喜欢
    • 2015-07-17
    • 2017-06-18
    • 2011-04-22
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2012-10-16
    相关资源
    最近更新 更多