Hibernate « Обновить объект в коде, измененный триггерами(trigger)
Есть некоторый код в транзакции, который при сохранении, скажем, комментария в базе вызывается триггер и у автора наворачивается счетчик comments + 1.
Но объект автора в данный момент тоже загружен в сессии и после того как триггер отработал нужно объект автора обновить, иначе после сохранения он перетрет изменения сделанные триггером.
Как обновить объект, если я его просто достаю заново через session.load(...) - не помогает.
Но объект автора в данный момент тоже загружен в сессии и после того как триггер отработал нужно объект автора обновить, иначе после сохранения он перетрет изменения сделанные триггером.
Как обновить объект, если я его просто достаю заново через session.load(...) - не помогает.
1 ответов
Самым простым решением думаю будет следующее.
Session session = ....;
//здесь код который вызывает отработку триггера.
session.flush();//сброс кеша, синхронизация с базой
session.refresh(author); //обновляем юзера
//здесь author уже будет иметь обновленные триггером данные.
Не уверен, что поможет, но попробуйте ввести версионность объекта.
<hibernate-mapping>
<class name="..." table="...">
...
<version name="version" column="version" unsaved-value="null" type="long" />
...
</class>
</hibernate-mapping>
Соответственно, триггер должен инкрементить не только счётчик комментариев, но и версию. Тогда, возможно, session.load(...) отработает корректно.