Спящий режим запускает ненужное обновление. Почему?

У меня есть три слоя: 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 пока не сделал что хочешь).

Другие вопросы по тегам