Это существующий запрос в спящем режиме 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 schools = query.list();
Когда мы обновляемся до версий гибернации 4/5, тайм-аут не работает, он ждет вечной блокировки, если таблица уже заблокирована в сеансе. p>
В спящем режиме 4 с тем же кодом я пытался заменить блокировку и тайм-аут таким образом
Код: Выделить всё
query.setLockOptions(new LockOptions(LockMode.UPGRADE).setTimeOut(100));Я попробовал другой способ: ну.
Код: Выделить всё
session.buildLockRequest(LockOptions.NONE).setLockMode(LockMode.UPGRADE).setTimeOut(2000).lock(school);Единственное решение, которое в настоящее время у меня есть, - это переопределить диалект оракула спящего режима и установить для метода mustUseFollowOnLocking() значение false, что также приведет к тайм-ауту блокировки и соблюдения.
Мне интересно, почему тайм-аут Lockoptions в спящем режиме не соблюдается одинаково. Если у кого-нибудь есть какие-либо идеи о блокировках и тайм-ауте в спящем режиме, пожалуйста, помогите, спасибо.
Подробнее здесь: https://stackoverflow.com/questions/435 ... th-timeout
Мобильная версия