Назад к вопросам
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.