繁体   English   中英

休眠乐观锁定测试

[英]Hibernate optimistic locking test

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

我已经看到了以下答案,概述了如何测试此Hibernate 3:乐观锁定单元测试

有人可以确认我的测试是否正确执行了此操作,因为我没有得到我期望看到的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,因此entity和newEntity将具有相同的ID和相同的版本。

您需要使用EntityManager.flush()或以编程方式启动/提交事务,在每个persist()merge()之后强制对数据库进行更新。

因此,代码将是:

    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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM