关于乐观锁(Hibernate)的基本问题

我是新手使用“乐观锁定”机制 - 我使用的是hibernate(在Jboss中)和容器管理事务(CMT)。 我想在我的实体读取和实体更新之间处理这种情况,其他人更新DB中的同一实体(即行)。 在这种情况下,我想抛出异常.. 我用@Version注释了我的实体 - 就像
@Version
private Long version;
现在,如果这足以进行版本管理或者我需要显式调用,我感到很困惑 EntityManager.lock()api就好
  {
    .
    .
    final QueryDTO queryDTO = entityManager.find(QueryDTO.class, id);
    entityManager.lock(queryDTO, LockModeType.READ);
    queryDTO.setStatus(updatedStatus);
    entityManager.persist(queryDTO);
  }
提前致谢,     
已邀请:
当通过@Version使用乐观锁定时,您根本不需要显式锁定(悲观锁定)。当实体更新到数据库时,将发生以下查询:
UPDATE QueryDTO SET status=<updated status>, ...other values..., version=100 WHERE id=<id> AND version=99
如果更新失败(某人/其他人改变了数据和版本),你将获得
OptimisticLockException
(因为你使用的是EntityManager,我认为这是关于JPA的,在“原始”Hibernate中它可能就像StaleStateException) 。     

要回复问题请先登录注册