2011-08-12 56 views
0

我有一個應用程序,用戶需要輸入數據,但表單分佈在多個屏幕上,每個屏幕都需要用戶在用戶更改頁面時將數據發送到服務器。在會話中保留Hibernate/Grails域對象

通常情況下,我會在會話中存儲域對象,並讓用戶在會話中更改此對象。一旦所有用戶更改完成,我會立即將所有更改保存到數據庫。這種形式不是流程,用戶可以自由地前往一頁並返回。

使用Grails,我想知道最好的方法。這個域對象是高度嵌套的,因此爲web層創建一個psudo域對象(然後將域逐個域映射到域obj)不是一個選項。

我想知道如果在會話中存儲Hibernate域對象是個好主意嗎?我有Hibernate會話問題,但由於域對象從休眠會話分離。

非常重要:我無法保存每個頁面上的數據庫更改。一旦用戶完成所有更改,我只能將域對象保存到數據庫。如前所述,這可能會跨越多個http請求。每次用戶更改都需要臨時存儲在某個地方。

我已經嘗試了幾次嘗試將域obj保留在會話中,然後在每次提交時,重新附加該域對象並進行更新,但grails會在每個請求上刷新會話,以便導致不完整的域對象被保存。

我希望有人能借我一些關於在內存中存儲用戶更改的建議,然後一次性向數據庫提交更改。

感謝

回答

2

您應該能夠:

  1. 從Hibernate的Session
  2. 中的request.session存儲對象圖檢索而不擇手段的對象圖(單位查詢或獲取)
  3. 拆離
  4. 繼續修改跨多個http請求的對象圖
  5. 完成後您的用戶的編輯,再附加對象圖表Hibernate的Session(合併)
  6. 沖洗Hibernate的Session,並承諾

這是你在做什麼?很難從你的文章中分辨出你是否希望跨越請求將對象圖保存在休眠會話中,或者你希望通過請求在HttpSession中獲取它。