Триггер базы данных и Hibernate - PullRequest
       23

Триггер базы данных и Hibernate

6 голосов
/ 08 августа 2011

Я встречал сценарий:

  1. save или update некоторые данные в целевой таблице в спящем режиме
  2. на целевой таблице есть триггер, который будетбыть выполненным до insert или update операций целевой таблицы
  3. select из этой записи с помощью hibernate

Но я обнаружил, что поля, которые были измененытриггер на самом деле не получен.Связано ли это с фиксацией транзакций в Hibernate (уже был вызван flush ()) или Hibernate?спасибо.

Ответы [ 2 ]

9 голосов
/ 08 августа 2011

Вы можете отобразить свойства как сгенерированные значения . Эти значения всегда поступают из базы данных и не могут быть сохранены. Hibernate автоматически загружает эти значения в последующем запросе после вставки или обновления базы данных.

4 голосов
/ 08 августа 2011

Это может быть вызвано как первым (сеанс), так и вторым (например, ehcache) кэшем.Чтобы перечитать сущность, вам нужно вызвать session.refresh ().

Из hibernate docs (внизу раздела)

Можно повторно загрузить объект и все его коллекции в любое время, используя метод refresh ().Это полезно, когда триггеры базы данных используются для инициализации некоторых свойств объекта.

sess.save(cat);
sess.flush(); //force the SQL INSERT
sess.refresh(cat); //re-read the state (after the trigger executes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...