Назад к вопросам
Middle
70
questionbank

Какие состояния может иметь объект в Hibernate?

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

В Hibernate объект может находиться в одном из следующих состояний:

  • Transient (Переходное): Объект создан с помощью оператора new, но еще не связан с сессией Hibernate. Нет соответствия в базе данных.

    // Transient state  
    User user = new User();  
    user.setName("John Doe");  
    
  • Persistent (Устойчивое): Объект связан с активной сессией Hibernate. Любые изменения, внесенные в объект, будут синхронизированы с базой данных при фиксации транзакции или сбросе (flush). Имеет соответствующую строку в базе данных.

    // Transition from Transient to Persistent  
    session.save(user);  
    

    Изменения в Persistent объекте отслеживаются:

    // Modification of a Persistent object  
    user.setEmail("john.doe@example.com"); // Changes will be persisted  
    
  • Detached (Отсоединенное): Объект ранее был Persistent, но его сессия была закрыта или объект был явно отсоединен (session.evict(object)). Он не связан с активной сессией, и изменения не будут автоматически синхронизированы с базой данных.

    // Transition from Persistent to Detached  
    session.close(); // Or session.evict(user);  
    

    Для сохранения изменений Detached объекта его необходимо повторно присоединить к сессии:

    // Reattaching a Detached object  
    session.update(user); // Or session.merge(user);  
    

Сводная таблица состояний:

Состояние Связь с сессией Соответствие в БД Отслеживание изменений Способ получения/перехода
Transient Нет Нет Нет new YourClass()
Persistent Да Да Да session.save(), session.get(), session.load(), session.createQuery().list()
Detached Нет Да Нет session.close(), session.evict(), session.clear()