我目前正在實現一個grails web應用程序,它有一些複雜的表單,其中關聯圖上的修改應該在「內存中」(即http會話)因爲實體或頂級域對象沒有保存。在Grails應用程序中管理多個請求中的關聯
例如
頂部至底部:文檔 - >類別 - >子類別...
要求:修改記錄/類別/子類別只應每當保存文檔並保存在任何其他情況。
我的第一種方法是存儲在HTTP會話的關聯ID,但這個結束了,在我的DocumentController.update動作很多線索代碼與當前持久狀態
// update some abstract association
for (def Iterator it = documentInstance.association.iterator(); it.hasNext();) {
if (!session.association.contains(it.next().someEntity.id)) {
it.remove()
}
}
for (def roleTypeId in session.association) {
// add/update association
...
}
線索同步會話狀態代碼在實際修改數據時變得更糟,例如,這意味着修改後的類別對象在頂級實體保存時必須被分離/重新連接/合併。
我會對你對這種長期工作單元的想法非常感興趣。
thx爲您的答覆。事實上,這已經是它在我的DocumentController.update行動 我已經嘗試的方式是分離整體對象圖,但這導致了與髒對象集合的問題,合併... 你做過嗎在你的Grails應用中有類似的用例嗎?如果是的話,你是如何實現修改關聯並保持對多個請求的修改而不是立即保存修改的? – 2010-01-21 12:32:33
我還沒有處理類似的用例 - 所以我不確定這是否正確。但我會使用服務作爲流程的一部分。看起來管理你正在談論的最好方法是使用稱爲範圍的另一個靜態屬性將服務範圍擴展到流程。將範圍設置爲'流'或'對話'(以包含子流)並記住在您的服務類中實現Serializable。然後,您應該能夠在這些範圍內管理您的更改,而不必擔心個別請求。 – Brandon 2010-01-21 13:11:14