Держите объект домена Hibernate / Grails в сеансе - PullRequest
0 голосов
/ 12 августа 2011

У меня есть приложение, в котором пользователь должен вводить данные, но форма распределяется по нескольким экранам, каждый из которых требует от пользователя POST-данных на сервер при смене страниц пользователя.

Обычно я бы сохранялдоменный объект в сеансе и пользователь может вносить изменения в этот объект в сеансе.После того, как все пользовательские изменения завершены, я бы сразу сохранил все изменения в БД.Эта форма не является потоком, пользователь может свободно переходить на одну страницу и обратно.

Используя Grails, я хочу знать лучший подход.Этот объект домена является сильно вложенным, поэтому создание объекта псевдодомена для веб-слоя (а затем сопоставление поля по полю с доменом obj) не вариант.

Я хочу знать, хранится ли объект домена Hibernate всессия хорошая идея?Однако у меня возникают проблемы с сеансом Hibernate из-за того, что объект домена отключен от сеанса Hibernate.

Очень важно: я не могу также сохранять данные в базе данных при каждом изменении страницы.Я могу сохранить объект домена в БД только после того, как пользователь завершит все свои изменения.Как указывалось ранее, это может охватывать несколько запросов http.Каждый раз, когда пользовательские изменения должны храниться где-то временно.

Я пробовал несколько попыток сохранить объектную область в сеансе, затем при каждой отправке повторно присоединял этот объект домена и делал мои обновления, но grailsсбрасывает сеанс при каждом запросе, так что это приводит к сохранению неполных доменных объектов.

Я надеюсь, что кто-нибудь мог бы дать мне несколько советов по сохранению пользовательских изменений в памяти, а затем сразу же, передавая изменения в БД.

Спасибо

1 Ответ

2 голосов
/ 12 августа 2011

Вы должны быть в состоянии:

  1. Извлечение графа объекта любым способом (запрос объекта или получение)
  2. Отключение от спящего режима
  3. Сохранить граф объектов в request.session
  4. Продолжить изменение графа объектов для нескольких запросов http
  5. После внесения пользовательских изменений повторно присоедините граф объектов к сеансу гибернации (объединение)
  6. Сбросить спящий режим и зафиксировать

Это то, что вы делаете? По вашему сообщению трудно сказать, хотите ли вы сохранить свой граф объектов в сеансе гибернации между запросами или хотите получить его в сеансе HttpSession между запросами.

...