我正在使用Hibernate 3.5.5.Final和JPA2
如何让测试用例测试hibernate锁是否正常工作?
我写了这个,但似乎测试没有通过当前的hibernate版本(在以前的版本中工作正常)
@Test(expected=OptimisticLockException.class)
public void testLock() {
EntityManager em = getEntityManager();
Foo foo1 = fooDAO.findById(1);
em.lock(foo1, LockModeType.WRITE);
foo1.setCode("code3");
em.flush();
}
编辑:
@Pascal:你在第二种情况下的意思是什么?
@Test(expected=OptimisticLockException.class)
public void testLock() {
EntityManager em = getEntityManager();
em.getTransaction().begin();
Foo foo1 = fooDAO.findById(1);
em.lock(foo1, LockModeType.WRITE);
fooDAO.createHibernateQuery("update Foo set version=version+1 where id = 1");
foo1.setCode("code3");
em.flush();
}
由于
答案 0 :(得分:2)
我在此测试中没有看到任何并发访问,没有理由让IMO失败。 如果要测试使用版本更新的乐观锁定的行为,则需要测试以下内容:
使用单个持久性上下文和SQL查询是另一种选择: