我目前正在实现一个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