在会话中保留Hibernate / Grails域对象

时间:2011-08-12 02:23:50

标签: hibernate grails gorm

我有一个应用程序,用户需要输入数据,但表单分布在多个屏幕上,每个屏幕都要求用户在用户更改页面时将数据发送到服务器。

通常,我会在会话中存储域对象,并让用户在会话中对此对象进行更改。完成所有用户更改后,我会立即将所有更改保存到数据库。此表单不是流程,用户可以自由地转到一页并返回。

使用Grails,我想知道最好的方法。此域对象是高度嵌套的,因此为Web层创建psudo-domain对象(然后逐字段映射到域obj)不是一种选择。

我想知道在会话中存储Hibernate域对象是否是一个好主意?我有Hibernate会话问题,但是由于域对象与hibernate会话分离。

非常重要:我无法在每个页面上更改数据库。一旦用户完成所有更改,我只能将域对象保存到DB。如前所述,这可能跨越几个http请求。每次,用户更改都需要临时存储在某处。

我尝试了多次尝试将域obj保留在会话中,然后在每次提交时,重新连接该域对象并进行更新,但grails会在每个请求上刷新会话,因此这会导致保存不完整的域对象。

我希望有人可以向我提供一些关于将用户更改存储在内存中的建议,然后立即将更改提交给数据库。

由于

1 个答案:

答案 0 :(得分:2)

你应该能够:

  1. 通过任何方式检索对象图(实体查询或获取)
  2. 从休眠会话中分离
  3. 将对象图存储在request.session
  4. 继续修改多个http请求的对象图
  5. 完成用户编辑后,将对象图重新附加到休眠会话(合并)
  6. 刷新hibernate会话并提交
  7. 这是你在做什么的?很难从你的帖子中看出你是想在跨越请求的hibernate会话中保留你的对象图,或者你想在HttpSession中跨越请求来获取它。