Что использовать режим "Авто" или "Зафиксировать",

Как описано в моем названии, я использую механизм hibernate Auto flush mode в своем приложении. Поэтому, когда я изменяю любые данные в постоянном объекте спящего режима, он автоматически отражается в базе данных. Я не хочу этого. Поэтому я нашел решение вместо FlushMode Commit.

Итак, вот мой вопрос:

  • Лучше ли использовать режим Commit flush вместо Auto? и
  • В чем смысл этого утверждения из документации?

    Сессия иногда очищается до выполнения запроса в порядке чтобы гарантировать, что запросы никогда не возвращают состояние устаревания.

http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/FlushMode.html

Ответ 1

Hibernate (и JPA) предназначены для автоматического обнаружения и сохранения изменений в постоянных объектах в базе данных. Нет операции сохранения.

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

Не вмешивайтесь в настройки флеша, он просто даст вам головные боли позже.

Ответ 2

лучше использовать режим фиксации Commit вместо Auto

Когда ваше приложение использует запросы, FlushMode.COMMIT, скорее всего, будет работать лучше, потому что он не будет очищать сеанс перед каждым запросом. Я знаю, что за javadoc он должен очищать сессию только тогда, когда это необходимо, но из моего опыта FlushMode.COMMIT работает еще лучше в сеансах только для чтения. Авто-флеш не означает, что любое изменение постоянного объекта немедленно отправляется в базу данных.

что означает нижний оператор, указанный в документе

Сессия иногда очищается до выполнения запроса, чтобы гарантировать, что запросы никогда не возвращают состояние устаревания.

Как я уже писал выше, когда используется FlushMode.AUTO(по умолчанию), он будет очищать сеанс перед каждым запросом (HQL, Criteria, SQL query), сделанным в базе данных, чтобы убедиться, что результаты будут содержать все сущности, добавленные в текущий сеанс.