2013-04-06 67 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