Вероятно, точные детали em.flush()
зависят от реализации.
В общем, в любом случае провайдеры JPA, такие как Hibernate, могут кэшировать инструкции SQL, которые они должны отправлять в базу данных, часто до тех пор, пока вы фактически не совершите транзакцию.
Например, вы вызываете em.persist()
, Hibernate помнит, что он должен сделать INSERT базы данных, но фактически не выполняет инструкцию, пока вы не совершите транзакцию. Афаик, это в основном делается из соображений производительности.
В любом случае, в любом случае, вы хотите, чтобы инструкции SQL выполнялись немедленно; обычно, когда вам нужен результат некоторых побочных эффектов, таких как автоматически сгенерированный ключ или триггер базы данных.
Что делает em.flush()
, так это очищает внутренний кэш инструкций SQL и немедленно выполняет его в базе данных.
Итог: никакого вреда не будет, только у вас может быть (незначительное) снижение производительности, так как вы игнорируете решения поставщика JPA в отношении наилучшего времени для отправки инструкций SQL в базу данных.