我的项目有锁定hibernate 3.3.2.GA版本的行机制,我们正在计划升级到休眠5.我打算让这个查询工作在更旧的休眠和更新的版本以及。休眠LockOptions超时
这是Hibernate 3.3.2.GA
如果该行被锁定在会议上已经这个查询将锁定该行现有的查询,将等到超时,并抛出超时如果超过。
Query query = session.getNamedQuery("select aps from WritableSchool aps where aps.schoolCd = :schoolCd");
query.setParameter("schoolCd", schoolCd);
query.setTimeout(2); // seconds
query.setLockMode("aps", LockMode.UPGRADE);
List<WritableSchool> schools = query.list();
当我们升级到休眠五分之四的版本,超时工作不就永远等待锁获取如果表被锁定在会话了。
在休眠4相同的代码我想更换锁和超时这样 query.setLockOptions(new LockOptions(LockMode.UPGRADE).setTimeOut(100));
它仍然没能得到超时工作。
我尝试了另一种方式。
session.buildLockRequest(LockOptions.NONE).setLockMode(LockMode.UPGRADE).setTimeOut(2000).lock(school);
据执行选择。对于更新,但没有履行的时间了,但是我实现。
目前我唯一的解决方案是重写hibernate oracle dialect,并将shouldUseFollowOnLocking()
设置为false,同时获得锁定和荣誉超时。
我想知道为什么超时在休眠锁定选项不符合。如果任何人有任何想法锁定和超时休眠,请帮助,谢谢。