Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.
Наука · 27 июля 2026 г.
🧠 JPA: не забывай про flush() перед clear() — иначе словишь баг — 27 июля 2026 г. в 06:18:24.567
🧠 JPA: не забывай про flush() перед clear() — иначе словишь баг Если ты используешь EntityManager вручную, например, при батчевой вставке или обновлении, то, скорее всего, пишешь что-то вроде: for (int i = 0; i < entities.size(); i++) { em.persist(entities.get(i)); if (i % 50 == 0) { em.clear(); // чтобы не росла память } } ⚠️ Но тут баг: без flush() перед clear() ты теряешь все неперсистенные изменения! Hibernate просто забудет про них. ✅ Правильно так: for (int i = 0; i < entities.size(); i++) { em.persist(entities.get(i)); if (i % 50 == 0) { em.flush(); em.clear(); } } 📌 flush() гарантирует, что все накопленные изменения пойдут в базу, а clear() уже безопасно очищает контекст. 💡 Эта ошибка особенно коварна, потому что не всегда проявляется — зависит от настроек, триггеров в БД, кэша и т.д. 👉 @BookJava

