Hibernate « Обновить объект в коде, измененный триггерами(trigger)

Есть некоторый код в транзакции, который при сохранении, скажем, комментария в базе вызывается триггер и у автора наворачивается счетчик comments + 1.

Но объект автора в данный момент тоже загружен в сессии и после того как триггер отработал нужно объект автора обновить, иначе после сохранения он перетрет изменения сделанные триггером.

Как обновить объект, если я его просто достаю заново через 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(...) отработает корректно.