Я только что заметил, что объекты Hibernate автоматически сохраняются в базе данных (или, по крайней мере, для кэширования), прежде чем я вызову любые методы save()
или update()
. Для меня это довольно странное поведение по умолчанию - но хорошо, пока я могу его отключить, все в порядке.
Проблема, с которой я столкнулся, заключается в том, что я хочу обновить состояние своей сущности (из состояния «1» в состояние «2») только в том случае, если сущность в базе данных все еще имеет состояние, в котором она находилась, когда я ее получал (состояние «1 «). Это необходимо для устранения проблем параллелизма, когда другой сервер обновляет этот же объект. По этой причине я создал пользовательский NamedQuery
, который будет обновлять сущность, только если она находится в ожидаемом состоянии «1». Вот некоторый псевдокод:
// Get the entity
Entity item = dao.getEntity();
item.getState(); // == 1
// Update the entity
item.setState(2); // Here is the problem, this effectively changes the
// state of my entity breaking my query that verifies
// that state is still == 1.
dao.customUpdate(item); //Returns 0 rows changes since state != 1.
Как мне убедиться, что установщики не меняют состояние в кеш / дБ?