我正在使用 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(使用前将#替换为@)