我有这样的测试:
@Transactional
@Test
public void addRemoveTest() {
MyEntitiy entity = new MyEntitiy ();
entity = textureRepository.saveAndFlush(entity );
TestTransaction.flagForCommit();
TestTransaction.end();
TestTransaction.start();
final MyEntitiy loadedTexture = myEntityRepository.findOne(entity .getId());
}
这完全没问题。但是当我删除事务的Committing代码时,存储库在调用findOne()时不会调用数据库。我可以以某种方式强制它为数据库调用我的测试吗?
我更喜欢我的测试不提交任何交易。
我无法让Session清除缓存。我甚至不确定清理会话是否会有所帮助。
答案 0 :(得分:16)
我知道的唯一方法是在调用finder之前调用entityManager.clear()
。我认为您可以将EntityManager
自动装入您的测试中:
@Autowired
private EntityManager entityManager;
您的测试将如下所示:
@Transactional
@Test
public void addRemoveTest() {
MyEntitiy entity = new MyEntitiy ();
entity = textureRepository.saveAndFlush(entity );
entityManager.clear();
final MyEntitiy loadedTexture = myEntityRepository.findOne(entity .getId());
}