Трябва да използвате PESSIMISTIC_WRITE
по време на заявка:
Query q = session
.createQuery("from MyObject n where n.state = 'NEW'")
.setLockOptions(new LockOptions(LockMode.PESSIMISTIC_WRITE));
List<MyObject> list = (List<MyObject>) q.list();
Заключването на родителските обекти е достатъчно. Няма непременно да възникнат безизходици. Може да получите неуспешно получаване на заключване, ако нишката, която държи заключването, не го освободи преди друга нишка от изчакване на изчакване.
Тъй като използвате Oracle, ето как ИЗБЕРЕТЕ ЗА АКТУАЛИЗАЦИЯ работи:
Така че, ако T1 получи ексклузивно заключване на някои редове, T2 няма да може да прочете тези записи, докато T1 не се ангажира или върне обратно. Ако T2 използва READ_UNCOMMITTED ниво на изолация, тогава T2 никога няма да блокира записите за заключване, тъй като просто използва регистрационни файлове за отмяна, за да реконструира данни, сякаш е било, когато е започнала заявката. За разлика от стандарта SQL, Oracle READ_UNCOMMITTED ще: