2015-07-16 3 views
1

У меня есть сценарий, в котором действие Struts2 извлекает объект модели из внутреннего блока и помещает его в стек OGNL, и представление в интерфейсе обновляется с этими данными.Контекст транзакции Hibernate с Struts2-действиями

Затем я изменяю значение в представлении, которое соответствует объекту модели и обновлению. Затем это значение сохраняется с помощью метода Hibernate getSession().update(model).

Вопрос: Когда модель объекта считывается в стек OGNL, что контекст транзакции закрывается и объектная модель получает отдельностоящий. Почему я могу сохранить изменения, используя getSession().update(model)? Я думаю, getSession().merge(model) следует использовать.

Пожалуйста, помогите мне разобраться в двусмысленности.

+0

, потому что у вас есть объект в стеке и когда вы вызываете метод обновления весной создаст новую сессию и обновить объект .... –

ответ

1

Оба метода могут передавать отдельно от объекта объект как параметр, но если есть объект в контексте с данным идентификатором, первый метод генерирует исключение. Считывание

Обновить постоянный экземпляр с идентификатором данного отдельного экземпляра . Если существует постоянный экземпляр с тем же идентификатором, выдается исключение.

public void update(Object object); 

Второй метод не выбрасывает исключение, поскольку он загружает не существующий объект по идентификатору к контексту, обновить его, и возвращается к абоненту.

Скопируйте состояние данного объекта на постоянный объект с тем же идентификатором . Если в сеансе нет постоянного экземпляра, связанного с сеансом , он будет загружен. Верните постоянный экземпляр. Если заданный экземпляр не сохранен, сохраните копию и верните ее в качестве вновь сохраняющегося экземпляра . Данный экземпляр не ассоциируется с сеансом.

public Object merge(Object object); 
+0

Спасибо за ваш ответ. Это ясно, как кристалл. –

Смежные вопросы