Практические примеры использования Hibernate FlushMode.ALWAYS - PullRequest
0 голосов
/ 28 августа 2011

Не могли бы вы привести несколько практических примеров использования FlushMode.ALWAYS в сеансе Hibernate?

Спасибо

Ответы [ 3 ]

2 голосов
/ 16 октября 2012

Я встречал случаи, когда это требовалось.Один случай ниже: Таблица A имеет уникальное ограничение на столбец B. Вы хотите удалить r1 и вставить r2 в одну транзакцию, где r1.B == r2.B.Переупорядочение режима гибернации в пределах одной транзакции вызвало UniqueConstraintViolation.Здесь помогает FlushMode.ALWAYS, или вы можете сделать явный session.flush ().

2 голосов
/ 28 августа 2011

Это почти всегда не нужно.Это может быть полезно, если изменения, сделанные в сеансе, вызывают некоторые изменения при сбросе в базу данных, и эти изменения не могут быть обнаружены Hibernate.Например, если какая-либо вставка в таблицу A приводит к выполнению триггера, если этот триггер вставляет строки в таблицу B, и если вы выполняете запрос к таблице B. В этом случае Hibernate не может обнаружить необходимость очистки сеанса доHQL-запрос выполнен.

0 голосов
/ 18 сентября 2017

Тесты

При @Transactional стандартное / подразумеваемое поведение для тестов равно @Rollback(true) ... При Hibernate это означаетчто базовая база данных не участвует вообще.И какие бы ограничения вы ни указали для своих таблиц, они также не будут оцениваться.Если ваши тесты нарушают некоторые из этих ограничений, о которых вы не узнаете, тесты пройдут успешно.Пока вы не переопределите @Rollback на false или не выполните принудительную очистку с помощью flush() или FlushMode.ALWAYS.

...