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

标签 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 Controller 中,我需要在单个事务中调用两个 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 方法之外创建,他们将使用现有交易(由于默认传播)而不是创建自己的新交易。

关于java - 如何在 Java Spring 和 Hibernate 的单个事务中管理 2 个 DAO 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33321156/

相关文章:

java - 使用 enctype ="multipart/form-data"将选定的图像获取到 Controller 类?

java - Visual Studio 2013 企业版 : Oracle Java SDK A more recent version of this software is required

java - 通过 Futures 实现线程

java - Java 方法中的最大局部变量数

java - 如何在加入 HQL 时应用 2 个条件

java - 另一个@tx :annotation-driven causing autowired to fail for Junit Test

未找到 java 代理类异常

hibernate - PostgreSQL hibernate 错误 : "Cannot change transaction isolation level in the middle of a transaction"

java - 我的 Java Spring Boot Maven REST API 不起作用

java - 未知的生命周期阶段 "spring-boot"