SpringFramework:@Transactional(readOnly = true) 不适用于 h2

2024-02-14

我正在使用 SpringFramework 进行事务测试。 我有以下课程。

用户服务类

@Transactional
public interface UserService {
    void add(User user);

    @Transactional(readOnly = true)
    User get(String id);

    @Transactional(readOnly = true)
    List<User> getAll();

    void deleteAll();

    void update(User user);
}

UserServiceImpl.类

public class UserServiceImpl implements UserService {
    // skip some methods
    @Override public void update(User user) { userDao.update(user); }
}

测试用户服务.class

public class TestUserService extends UserServiceImpl {
    @Override
    public List<User> getAll() {
        for (User user : super.getAll()) {
            // try to update in get* method. it's read-only. 
            super.update(user);
        }
        return null;
    }
}

测试代码

@Test(expected = TransientDataAccessResourceException.class)
public void readOnlyTransactionAttribute() {
    testUserService.getAll();
}

此测试代码是使用mysql时的成功案例。但使用H2内存数据库时失败。这是因为交易完成时没有异常。

我阅读了Spring框架文档并发现了以下内容:http://docs.spring.io/spring/docs/4.3.x/javadoc-api/org/springframework/transaction/annotation/Transactional.html#readOnly-- http://docs.spring.io/spring/docs/4.3.x/javadoc-api/org/springframework/transaction/annotation/Transactional.html#readOnly--

这只是作为实际交易子系统的提示;它不一定会导致写访问尝试失败。当请求只读事务时,无法解释只读提示的事务管理器不会抛出异常,而是默默地忽略该提示。

但我想知道是否有办法用H2数据库通过这个测试。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringFramework:@Transactional(readOnly = true) 不适用于 h2 的相关文章

随机推荐