我在 JUnit 中使用 Hibernate 和 Spring 进行集成。如果代码正确处理并发,我将使用多次读写来测试我的代码。Hibernate 的问题是我不能单独使用多线程来模拟它。Hibernate 抱怨没有绑定到 DAO 的活动 Hibernate 会话。因此,我所做的就是在线程中的 Hibernate 的 TransactionTemplate 中执行 DAO 的方法,例如
Thread alpha = new Thread(new Runnable() {
@Override
public void run() {
TransactionTemplate tt = new TransactionTemplate(tm);
tt.execute(new TransactionCallbackWithoutResult() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
Address address =addrDao.findBy("John Doe");
address.setZipCode("12345");
addrDao.update(address);
}
});
}
});
创建另一个线程,beta,具有相同的内容,但有额外的时间延迟。最后,启动两个线程,
alpha.start();
beta.start();
有效。我的问题是,除了在 Spring+Hibernate+Junit 设置中使用 TransactionTemplate(...) 之外,还有什么更好的方法吗?
此外,我发现即使我@TransactionConfiguration(defaultRollback = true)
在此测试用例的开头包含了该操作,也无法在此测试结束时回滚。
谢谢