Здравствуйте, and_hom, Вы писали:
D>>Хибернейт может использовать только средства целевой базы для подобных вещей. Попробуй использовать "... for update nowait" в нативном запросе к ораклу, с хибернейтом не пробовал, но в PRO*C "форапдейт ноу вейт" работает.
_>Хибернейт прекрасно умеет nowait на Oracle, MS SQL, на других не пробовал (query.setLockMode(...)) _>Но nowait — это значит "кидать эксепшн сразу же, если наткнулись на строчку, не удовлетворяющую условию". Тогда придётся тащить список id-шников и в цикле по ним
nowait означает пропускать строки залоченные другими транзакциями, т.е. если у нас есть 3 строки две из которых залочены другими транзакциями, то результирующий запрос вернет одну строку, при этом наложив на нее эксклюзивную блокировку на запись (TX). Последующий запрос не вернет ни одной строки, если они все еще залочены транзакциями.
Т.е. оракл никаких исключений не бросает, если они у вас возникают, то скорее всего вследствие не правильного конфигурирования хибернейта, поэтому я и предложил использовать нативный запрос к ораклу, дабы избежать подобных коллизий.