gpt4 book ai didi

java - Hibernate乐观锁测试

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

我知道以前有人问过这个问题,但我正在尝试使用版本字段测试 Hibernate 的乐观锁定功能。

我看到了以下概述了如何测试此 Hibernate 3 : optimistic locking unit test 的答案。

有人可以确认我的测试是否正确执行此操作,因为我没有收到我期望看到的 StaleObjectStateException。

@Test(expected = StaleObjectStateException.class)
public void optimisticLockingTest() {
DummyEntity entity= new DummyEntity("name");
entityDao.persist(entity);

entityDao.detach(entity);
entity.setName("new name");

// Get new instance of the same entity
final DummyEntity newEntity = entityDao.findById(entity.getId());
newEntity.setName("Different name");
entityDao.persist(newEntity);

entity = entityDao.merge(entity );
entityDao.persist(entity);
}

最佳答案

版本在更新数据库之前递增。

因为所有这些代码都在一个事务中,所以当您执行 entityDao.findById(entity.getId()); 时,entity.getVersion() 仍然是 0因此实体和新实体将具有相同的 ID 和相同的版本。

您需要在每次 persist()merge() 之后使用 EntityManager.flush() 或通过编程方式启动/提交事务。

所以代码是:

    DummyEntity entity= new DummyEntity("name");
entityDao.persist(entity);
entityDao.flush();
entityDao.detach(entity);

final DummyEntity newEntity = entityDao.findById(entity.getId());
newEntity.setName("Different name");
entityDao.persist(newEntity);
entityDao.flush();

entity.setName("new name");
entity = entityDao.merge(entity );
entityDao.persist(entity);

关于java - Hibernate乐观锁测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28107776/

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