在渲染时,行已被另一个事务更新或删除

时间:2014-03-07 10:02:43

标签: jquery grails asynchronous wait gsp

我有一个像两个管理员一样的项目结构可以查看单个患者的详细信息,因此当管理员同时寻找相同的患者详细信息(视为健康状况)时。我得到了像

这样的例外
Row was updated or deleted by another transaction

在调试之后,在controller方面没有问题,但在gsp中有一个service call延迟了gsp的渲染过程,因此在同时另一个管理员试图渲染相同的gsp,这个异常会上升。

注1:我无法避免来自gsp的服务调用。

注2:没有保存或更新操作 - 所以像merge()或lock()这样的解决方案几乎不会起作用

我的问题:有没有办法让该请求等到渲染过程结束?或任何其他方式来避免这种例外。

代码段

def test = testService.getAllLogs(id, startDate, endDate)
render(view:"test",model:[test: test])

1 个答案:

答案 0 :(得分:1)

如果由于视图操作而没有编辑而确实发生了问题,那么您可能会对某些内容进行修改,并且grails正在尝试为您自动保存。

查找gsp或控制器中域对象列表的排序,这些列表会在没有任何实际更改时导致更新。您还可以查看数据库,查看是否在页面视图中更新了版本列。

现在,如果真正的问题是编辑在多个地方发生,你有几个选择。将域模型分解为有限的编辑冲突。或者确保将所有更改从服务器推回到实时页面。