По умолчанию нет. Поскольку вы не изменяете сущность, а скорее другие сущности, которые связаны с ней.
Однако такая функциональность возможна, но для этого требуется немало конфигурации и желательно планирование заранее. Я не собираюсь дублировать весь код от уважаемого Влада Михалча, см. Здесь .
В основном вам нужно использовать прослушиватели событий для перехвата вызовов сохранения и использования RootAware
интерфейс (не интерфейс Hibernate, просто помощник) сохраняемая дочерняя сущность знает свой «корень» и может использовать блокировку OPTIMISTIC_FORCE_INCREMENT
на своей родительской сущности для увеличения своей версии.
В отношении согласованности данных: сброс может произойти сбой, если дочерний элемент был изменен или родительский элемент был изменен (или оба были изменены), но lock()
на корневом объекте гарантирует, что операция является атомарной. Если (пессимистическая) блокировка на корне успешна, и (оптимистическая) блокировка на дочернем элементе успешна, полная транзакция успешна. Благодаря пессимистичной блокировке, нет шансов получить «половину обновлений», которые бы повредили данные.