Mic*_*man 2 testing spring hibernate
我想编写一个单元测试来验证乐观锁定是否正确设置(使用Spring和Hibernate).
我想让测试类扩展Spring AbstractTransactionalJUnit4SpringContextTests
.
我想要最终得到的是这样的方法:
@Test (expected = StaleObjectStateException.class)
public void testOptimisticLocking() {
A a = getCurrentSession().load(A.class, 1);
a.setVersion(a.getVersion()-1);
getCurrentSession().saveOrUpdate(a);
getCurrentSession().flush();
fail("Optimistic locking does not work");
}
Run Code Online (Sandbox Code Playgroud)
此测试失败.你推荐什么作为最佳实践?
我试图这样做的原因是我想将其转移version
到客户端(使用DTO).我想证明,当DTO被发送回服务器并与新加载的实体合并时,如果在此期间其他人更新了实体,则保存该实体将失败.
似乎根本不是将所有字段从DTO(包括版本)转移到新加载的实体,尝试保存它,以及在DTO被修改时实体被修改的情况下获得异常的选项客户端.
原因是Hibernate根本不关心你对版本字段做了什么,因为你在同一个会话中工作.会话记住版本字段的值.
一个简单的证明:
@Test (expected = StaleObjectStateException.class)
public void testOptimisticLocking() {
A a = getCurrentSession().load(A.class, 1);
getCurrentSession().evict(a); //comment this out and the test fails
a.setVersion(a.getVersion()-1);
getCurrentSession().saveOrUpdate(a);
getCurrentSession().flush();
fail("Optimistic locking does not work");
}
Run Code Online (Sandbox Code Playgroud)
无论如何,谢谢大家的帮助!
归档时间: |
|
查看次数: |
6342 次 |
最近记录: |