作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想编写一个单元测试来验证是否正确设置了乐观锁定(使用 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");
}
这个测试失败了。您有什么推荐的最佳做法?
我尝试这样做的原因是我想将 version
传输到客户端(使用 DTO)。我想证明当 DTO 被发送回服务器并与新加载的实体合并时,如果该实体同时被其他人更新,则保存该实体将失败。
最佳答案
似乎无法将所有字段从 DTO(包括版本)传输到新加载的实体,尝试保存它,并在 DTO 修改实体时获得异常在客户端修改。
原因是 Hibernate 根本不关心你对版本字段做了什么,因为你在同一个 session 中工作。 session 会记住版本字段的值。
一个简单的证明:
@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");
}
还是感谢大家的帮助!
关于hibernate - 单元测试 Hibernate 乐观锁(使用 Spring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2455794/
我正在编写一个 Web 应用程序,两个不同的用户可以在其中更新事物列表,例如待办事项列表。我已经意识到,乐观锁定机制效果最好,因为我不希望出现高争用情况。 我一直在查看事务隔离级别,现在我有点困惑。看
这个问题在这里已经有了答案: Pessimistic versus Optimistic Concurrency (Locking versus Feedback) (3 个答案) 关闭 8 年前。
我是一名优秀的程序员,十分优秀!