Зазвичай не рекомендується чітко викликати флеш, якщо це не потрібно. Hibernate зазвичай автоматично викликає Flush в кінці транзакції, і ми повинні дозволити йому це зробити. Зараз є деякі випадки, коли вам може бути потрібно явно викликати змив, коли друге завдання залежить від результату першого завдання стійкості, причому обидва знаходяться всередині однієї транзакції.
Наприклад, вам може знадобитися зберегти нову сутність, а потім використовувати ідентифікатор цієї сутності, щоб виконати якесь інше завдання всередині тієї самої транзакції, у такому випадку потрібно явно очистити сутність спочатку.
@Transactional
void someServiceMethod(Entity entity){
em.persist(entity);
em.flush()
doSomeThingElse(entity.getId());
}
Також зауважте, що явне змивання не спричиняє фіксацію бази даних, фіксація бази даних виконується лише в кінці транзакції, тому, якщо після виклику флеш-помилки виникає помилка виконання, зміни все одно повертаються.
sessionFactory
використання@Transactional
анотації, якщо ви заглянули в неї. Вам не знадобиться ваш код для транзакцій скрізь, а потім (в деяких ситуаціях це потрібно).