SpringFramework:@Transactional(readOnly=true)不使用h2
我正在使用SpringFramework进行事务测试。 我有以下课程 UserService.classSpringFramework:@Transactional(readOnly=true)不使用h2,spring,spring-data,h2,spring-transactions,Spring,Spring Data,H2,Spring Transactions,我正在使用SpringFramework进行事务测试。 我有以下课程 UserService.class @Transactional public interface UserService { void add(User user); @Transactional(readOnly = true) User get(String id); @Transactional(readOnly = true) List<User> getAll
@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);
}
public class UserServiceImpl implements UserService {
// skip some methods
@Override public void update(User user) { userDao.update(user); }
}
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;
}
}
TestUserService.class
@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);
}
public class UserServiceImpl implements UserService {
// skip some methods
@Override public void update(User user) { userDao.update(user); }
}
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;
}
}
此测试代码是使用mysql时的一个成功案例。但当使用内存中的H2数据库时失败。这是因为事务完成时没有异常
我阅读了Spring框架文档,发现了以下内容:
这只是作为实际事务子系统的提示;它不一定会导致写入访问尝试失败。无法解释只读提示的事务管理器在请求只读事务时不会引发异常,而是默默地忽略该提示
但是我想知道是否有办法通过H2数据库的测试。只读只是一个提示(如文档中所述)。如果您想在不使用该标志的数据库中处理该问题,则需要修改jdbc驱动程序。这可能是你不想做的。@M.Deinum谢谢!