Поскольку JPA является спецификацией, на этот вопрос просто ответить. Проверьте спецификацию: -)
3.10.8 Запросы и режим сброса
Настройка режима очистки влияет на результат запроса следующим образом.
Когда запросы выполняются в транзакции, если для объекта Query, TypedQuery или StoredProcedureQuery установлено значение FlushModeType.AUTO, или если для режима постоянства сброса задано значение AUTO (по умолчанию), а для режима сброса не задано значение объект запроса, поставщик постоянства отвечает за то, чтобы все обновления состояния всех объектов в контексте постоянства, которые могут потенциально повлиять на результат запроса, были видимы для обработки запроса.
запрос. Реализация поставщика постоянства может достичь этого путем сброса этих объектов в базу данных или с помощью других средств. Если установлено значение FlushModeType.COMMIT, влияние обновлений, внесенных в объекты в контексте постоянства, на запросы не указывается.
Если контекст постоянства не был присоединен к текущей транзакции, поставщик постоянства должен
не сбрасывать в базу данных независимо от настройки режима сброса.
package javax.persistence;
public enum FlushModeType {
COMMIT,
AUTO
}
Если транзакция не активна, поставщик сохраняемости не должен сбрасываться в базу данных
https://download.oracle.com/otn-pub/jcp/persistence-2_1-fr-eval-spec/JavaPersistence.pdf?AuthParam=1561799350_4cc62583442da694a6a033af82faf986
Затем есть документ Hibernate:
6,1. AUTO flush
По умолчанию Hibernate использует режим AUTO flush, который запускает сброс в следующих случаях:
до совершения транзакции
до выполнения запроса JPQL / HQL, который перекрывается с действиями объекта в очереди
перед выполнением любого собственного запроса SQL, который не имеет зарегистрированной синхронизации
https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#flushing