Есть мегапроблема. Не уверен, что она вообще решаема, но всё же =)
Есть таблица, например
A | B
-------
1 | 4
1 | 2
Есть несколько потоков. Все они одинаковые.
1-й поток в Hibernate выполнил блокирующий select 1-й записи по условию where a=1.(maxResult(1),LockMode.UPGRADE)
Можно ли сделать так, чтобы второй поток не ждал 1-ю строку а искал дальше по a=1.
То есть, если привести на оракловом sql аналог (или посмотреть output хибернейта), то будет что-то вроде
1-й поток: select * from tab where a=1 and rownum<2 for update
2-й поток на тот же запрос должен не висеть и ждать и не падать, а искать следующую свободную запись.
То есть пролетать мимо блокировки вообще.
Или это только программно делается через LockMode.UPGRADE_NOWAIT и отлов эксепшнов? И не долго ли по времени будет получение ошибки из базы, кидание эксепшна по этому поводу итд?