gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:57:04 25 4
gpt4 key购买 nike

在我的测试用例中,我有事务方法来创建用户,然后在不同的线程中调用异步方法,从数据库中检索该用户。在下面的代码中,在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com