Понимание FlushMode в Hibernate: подробное руководство

FlushMode в Hibernate: обзор

В Hibernate FlushMode представляет собой стратегию, используемую для синхронизации контекста персистентности с базовой базой данных. Он определяет, когда изменения, внесенные в постоянные объекты, должны быть записаны в базу данных. Понимая FlushMode, вы можете контролировать, когда и как Hibernate выполняет операторы SQL для сохранения ваших данных.

Hibernate предоставляет различные параметры FlushMode, каждый из которых служит определенной цели. Давайте рассмотрим некоторые распространенные методы FlushMode на примерах кода:

  1. Режим автоматической очистки:
    Режим автоматической очистки является режимом по умолчанию в режиме гибернации. Это означает, что Hibernate будет решать, когда очистить сеанс на основе определенных условий, таких как выполнение запроса или подтверждение транзакции. Вот пример:
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// Perform some operations on persistent objects
session.saveOrUpdate(object1);
session.saveOrUpdate(object2);
// Hibernate decides when to flush the session
transaction.commit();
session.close();
  1. COMMIT FlushMode:
    При использовании COMMIT FlushMode Hibernate будет сбрасывать сеанс только при фиксации транзакции. Этот режим может быть полезен в сценариях, где вы хотите минимизировать количество операторов SQL, выполняемых во время транзакции. Вот пример:
Session session = sessionFactory.openSession();
session.setFlushMode(FlushMode.COMMIT);
Transaction transaction = session.beginTransaction();
// Perform some operations on persistent objects
session.saveOrUpdate(object1);
session.saveOrUpdate(object2);
// Hibernate flushes the session only when the transaction is committed
transaction.commit();
session.close();
  1. MANUAL FlushMode:
    MANUAL FlushMode дает вам полный контроль над тем, когда сеанс должен быть сброшен. Для очистки сеанса с помощью метода flush()требуется вмешательство вручную. Вот пример:
Session session = sessionFactory.openSession();
session.setFlushMode(FlushMode.MANUAL);
Transaction transaction = session.beginTransaction();
// Perform some operations on persistent objects
session.saveOrUpdate(object1);
session.saveOrUpdate(object2);
// Manually flush the session
session.flush();
transaction.commit();
session.close();
  1. NEVER FlushMode:
    NEVER FlushMode не позволяет Hibernate автоматически сбрасывать сеанс. Это означает, что никакие изменения, внесенные в постоянные объекты, не будут синхронизированы с базой данных, если они не будут удалены явно. Вот пример:
Session session = sessionFactory.openSession();
session.setFlushMode(FlushMode.NEVER);
Transaction transaction = session.beginTransaction();
// Perform some operations on persistent objects
session.saveOrUpdate(object1);
session.saveOrUpdate(object2);
// Changes are not automatically flushed
transaction.commit();
session.close();