2013-04-06 62 views
1

我想更新实体的@Version属性,而不需要对实体进行任何更改。该实体具有作为另一个实体的子集合。我想用@Version属性更新基本实体以在Hibernate控制下获取此实体版本的新值。我有类似的东西(attribute不与@版本注解属性):如何加载和更新实体以增加Hibernate @Version属性?

MyEntity entity = (MyEntity) getSession().load(Entity.class, id); 
entity.setAttribute(new String(entity.getAttribute())); 
getSession().update(entity); 

但是,这是行不通的。只有在我为其中一个属性设置新值时,实体才具有新版本值。如何在没有任何更改的情况下加载和更新实体以增加Hibernate @Version属性?

+0

只是好奇。你为什么要增加版本属性? – dcernahoschi 2013-04-06 21:53:12

回答

1

事实上,你应该做一个锁定OM您实体与LockMode.FORCE版本增量:

Session session = getSessionFactory().openSession(); 
Transaction tx = session.beginTransaction(); 
MyEntity u = (MyEntity) session.get(MyEntity.class, id); 
session.lock(u, LockMode.FORCE); 
tx.commit(); 
session.close(); 
+0

感谢您的回答。不过,锁定方法已弃用我已经使用过类似的东西:session.buildLockRequest(LockOptions.UPGRADE).setLockMode(LockMode.PESSIMISTIC_ FORCE_INCREMENT).lock(u);但不幸的是我得到这个异常:'不能提交Hibernate事务;嵌套异常是org.hibernate.TransactionException:事务未成功启动 – woyaru 2013-04-12 11:14:45