Спящий режим запускает ненужное обновление. Почему?
У меня есть три слоя: Action,Service,DAO. Я загрузил объект (класса Employee) из БД, используя hibernate с идентификатором 123. Я сделал некоторые изменения в объекте employee. Позже я создал бизнес-объект hibernate и внес в него некоторые изменения.
Employee e = service.getEmp(123);
e.setName("Ashok");
Order o = new Order
o.setNumber(567);
service.saveOrUpdate(o);
В этом сценарии, почему он пытается обновить объект сотрудника, хотя я не говорю, чтобы сохранить его? Как отсоединить это от сессии? Я не хочу, чтобы Hibernate обновил объект сотрудника.
1 ответ
В этом сценарии, почему он пытается обновить объект сотрудника, хотя я не говорю, чтобы сохранить его?
Я цитирую из спящих документов:
Постоянные транзакционные экземпляры (т. Е. Объекты, загруженные, сохраненные, созданные или запрошенные сеансом) могут быть обработаны приложением, и любые изменения в постоянном состоянии будут сохраняться при сбросе сеанса. [...]. Нет необходимости вызывать определенный метод (например, update(), который имеет другое назначение), чтобы сделать ваши изменения постоянными.
А также
Как отделить это от сессии?
Отметить коллекции с cascade="evict"
, Затем Session.evict(Object) объект перед сбросом на ваш объект (если у вас есть FlushMode.AUTO
тогда, возможно, установите его на MANUAL
пока не сделал что хочешь).