SpringFramework:@Transactional(readOnly = true)不能与h2一起使用

时间:2017-06-12 12:12:57

标签: spring spring-data h2 spring-transactions

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

UserService.class

static unsigned long lastMillis = 0;
if (millis() - lastMillis < 30 * 1000UL) {
  lastMillis = millis();
  //do your stuff
}

UserServiceImpl.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);
}

TestUserService.class

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 Framework文档,发现了以下内容: http://docs.spring.io/spring/docs/4.3.x/javadoc-api/org/springframework/transaction/annotation/Transactional.html#readOnly--

  

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

但我想知道是否有办法通过H2数据库传递此测试。

0 个答案:

没有答案