gpt4 book ai didi

hibernate - 单元测试 Hibernate 乐观锁(使用 Spring)

转载 作者:行者123 更新时间:2023-11-28 20:02:35 25 4
gpt4 key购买 nike

我想编写一个单元测试来验证是否正确设置了乐观锁定(使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com