В нашем приложении мы загружаем сущность, и некоторая бизнес-логика «симуляции» изменяет атрибут (для спящего режима этой сущности теперь грязный).
После этого мы хотим сохранить результаты моделирования в базе данных. Это мы делаем, явно вызывая resultRepo.save(result). Во всем нашем проекте мы используем эту парадигму, которую явно называем *Repo.save(..) для объектов, которые хотим сохранить.
Проблема в том, что если транзакция завершается, Hibernate теперь автоматически также сохраняет грязный объект. Как мы можем избежать этой скрытой магии?
Возможные решения:
- не работает, так как нам нужно сохранить результаты.
Код: Выделить всё
Transactional(readOnly=true) - отсоединить объект вручную (или клонировать необходимые данные) в новый объект --> очень неудобно, поскольку у нас есть такая ситуация так много мест.
- Установка режима спящего режима в MANUAL -> теперь все работает как положено, но
У меня нет действительно знаешь почему? - Это похоже на хак, потому что я пытаюсь настроить грязное автосохранение и использовать для этого режим очистки.
Если это сводит с ума: мы используем Hibernate 5.6.5 на Spring Boot 2.6.4.
Подробнее здесь: https://stackoverflow.com/questions/716 ... -hibernate