FlushMode в Hibernate: обзор
В Hibernate FlushMode представляет собой стратегию, используемую для синхронизации контекста персистентности с базовой базой данных. Он определяет, когда изменения, внесенные в постоянные объекты, должны быть записаны в базу данных. Понимая FlushMode, вы можете контролировать, когда и как Hibernate выполняет операторы SQL для сохранения ваших данных.
Hibernate предоставляет различные параметры FlushMode, каждый из которых служит определенной цели. Давайте рассмотрим некоторые распространенные методы FlushMode на примерах кода:
- Режим автоматической очистки:
Режим автоматической очистки является режимом по умолчанию в режиме гибернации. Это означает, что 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();
- 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();
- 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();
- 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();