Sobes.tech
Назад к вопросам
Senior
3

Какими методами можно переводить сущность из одного состояния в другое в Hibernate?

Компании, где спрашивали
Технократия

Ответ от нейросети

sobes.tech AI

В Hibernate сущности могут находиться в разных состояниях: transient (новая, не связанная с сессией), persistent (связанная с сессией), detached (отсоединённая от сессии).

Перевод сущности из одного состояния в другое осуществляется следующими методами:

  • save() — сохраняет новую (transient) сущность в базу, переводит её в persistent.
  • persist() — похож на save(), но с некоторыми отличиями в поведении транзакций и генерации идентификаторов.
  • update() — переводит detached сущность обратно в persistent, связывает с текущей сессией.
  • merge() — копирует состояние detached сущности в managed сущность, возвращает managed экземпляр.
  • saveOrUpdate() — сохраняет новую или обновляет detached сущность.
  • delete() — удаляет persistent сущность из базы.

Пример:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

// transient
Entity e = new Entity();

// перевод в persistent
session.save(e);

// detach
session.evict(e);

// update (attach)
session.update(e);

// merge
Entity managed = (Entity) session.merge(e);

tx.commit();
session.close();

Таким образом, методы save/persist, update, merge позволяют переводить сущности между состояниями в Hibernate.