Если два отдельных запроса обращаются к updateData()
одновременно, вы можете получить устаревшие данные. Вы можете справиться с устареванием, заблокировав извлеченные данные в updateData()
. Если вы используете Hibernate в качестве поставщика JPA, вы можете заблокировать данные следующим образом:
updateData() {
Object obj = getData(id);
Session session = (Session) em.getDelegate();
session.refresh(obj, LockMode.UPGRADE);
}
Обновление необходимо, потому что может случиться так, что между извлечением и блокировкой данных другая транзакция завершится в updateData
.
Имейте в виду, что менеджер сущностей, используемый в getData
и updateData
, должен совпадать.