java - Spring JPA @Transactional - 数据在不同线程中不可见

标签 java spring jpa

在我的测试用例中,我有事务方法来创建用户,然后在不同的线程中调用异步方法,从数据库中检索该用户。在下面的代码中,在 db 中找不到用户,dao 返回 null。如何确保不同线程都有数据?看来冲水并没有什么帮助。我需要手动提交吗?将隔离级别设置为 READ_UNCOMMITED 也没有帮助。


    @Transactional
    public void createUser()  {

        User user = new User();
        user.setLogin("test");

        userService.save(user);
        userService.flush();

        logger.debug("New user id {}", user.getId()); //id=1

        transactionalService.getUser(user.getId());

    }

事务服务


    @Async
    @Transactional
    public void getUser(Long id) {

        User user = userDao.getById(id);
        assertNotNull(user);
    } 

最佳答案

整个事务方法完成后提交事务。创建用户事务如果在主事务中则无法提交。将以前的代码更改为类似这样的代码即可。


    @Transactional
    public void createUser()  {

         User user = transactionalService.createUser();

         transactionalService.getUser(user.getId());

    }

和事务服务


    @Transactional(propagation=Propagation.REQUIRES_NEW)
    public void createUser()  {

        User user = new User();
        user.setLogin("test");

        userService.save(user);
        logger.debug("New user id {}", user.getId()); //id=1

        return user

    }

    @Async
    @Transactional
    public void getUser(Long id) {

        User user = userDao.getById(id);
        assertNotNull(user);
    }


关于java - Spring JPA @Transactional - 数据在不同线程中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55929796/

相关文章:

java - Spring Transaction @Transactional 注释不起作用

java - 使用 Spring XML 实体在带注释的文件中设置属性?

java - 如何为我的 Spring MVC/Security Restful Web 服务创建自定义 JSON 401 页面?

java - Camel 中的 JPA 组件无法自动重新连接到数据库

java - 找不到元素 'persistence' 的声明

java - GWT:如何使用 AsyncDataModel 填充 CellTree 的初始列表?

java - guava:Multimap 从集合中获取对象

java - 如何避免由于无法使用多重继承而导致重复代码。 hibernate

java - 从 Java 应用程序中运行 Talend Job

java - Spring data Jpa 与 Spring Jdbc 用于查找表