【发布时间】:2015-11-16 23:47:22
【问题描述】:
我有一个很快就会投入使用的游戏应用程序(play v2.3.4 - with ebean)。在我这些天的测试中,我看到了一些非常奇怪的东西!有时用于在 DB 中持久化模型的 update() 方法不起作用(没有任何例外)。我正在寻找问题,直到现在我想到了这 3 个:
- 我使用的是
update()而不是update(id),也许这就是问题所在? - 我正在使用没有 getter/setter 的公共字段,我发现这有时会产生问题,我得到了
null,所以稍后我将更改为私有字段 + getter/setter。但是现在,这会是问题吗? - 一旦我发现
update()不适用于所有对象,我就做了activator clean,之后一切顺利。 (另一次清洁没有帮助)
例如,在我的代码中,我对一些对象进行了循环,在我的循环中,我更改了每个对象的属性,并为该对象调用 update()。对于他们中的一些人来说,这些变化会持续存在,对于一些人来说不会!!! (这种代码和平通过我的app/Global.java 中的 AKKA 调度程序定期执行)
for (User respPerson : event.setup.respPersons) {
respPerson.addNotification(notification);
respPerson.update();
}
更新:
从update() 更改为update(id) 并没有解决问题。
这是 2 个User 实例的调试器图片。右边的总是更新成功,左边的不...
更新2
有关上述示例的更多信息:
在循环内部,我向用户实例添加了一个通知(用户持有一个List 的通知)。现在,如果我用调试器检查User 实例,它的通知列表中有一个新的Notification。所以一切都应该没问题...然后我打电话给update(),并希望这些更改应该保留在数据库中。但是在update 之后,当我使用静态调用并从数据库中获取具有相同id 的User 时,它不包含我之前添加的通知!
这总是发生在特定的 Object 实例上(在上图中,id 为 33 的用户)。我试图在另一个controller 中向这个User 实例添加一个Notification,并且它得到了持久化。但每次我使用计划任务在Global.java 内执行此操作时,它都不会持久化。
更新!问题已找到并修复。我会在接下来的几个小时内更新这个问题。
【问题讨论】:
-
什么最终解决了这个问题?
标签: playframework playframework-2.3 ebean