我有一个播放应用程序(播放v2.3.4 - 使用ebean)即将投入使用。在我这些天的测试中,我看到一些非常奇怪的东西!有时用于在DB中持久化模型的update()方法不起作用(没有任何例外)。我正在寻找这个问题,直到现在我还记得这三个问题:
update()
而不是update(id)
,这可能就是问题吗?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
个实例的调试器图片。正确的更新总是成功,左边的不是......
UPDATE2
有关上述示例的更多信息:
在内部循环中,我向User实例添加通知(用户持有List
个通知)。现在,如果我使用调试器检查User
实例,则其中有一个新的Notification
通知列表。所以一切都应该没问题...然后我调用update()
,并期望更改应该保留在DB中。但在update
之后,当我使用静态调用并从数据库获取User
id
时,它不包含我之前添加的通知!
这总是发生在Object的特定实例上(在上图中,id为33的用户)。我尝试在另一个Notification
中向此User
个实例添加controller
,并且它已被保留。但每次我使用计划任务在Global.java
内执行此操作时,都不会保持持久性。
UPDATE!找到并修复了问题。我会在接下来的几个小时内更新这个问题。
答案 0 :(得分:0)
也许你混合了公共属性和getter \ setters? Ebean(Play)自动生成getter \ setter如果你不在模型中创建它们,否则你需要创建所有这些。您可以关闭此功能,但默认情况下它已打开。
查看您的代码并尝试识别您始终使用相同的样式。
例如,我发现您使用respPerson.addNotification(notification);
,因此您还需要使用setId
之类的内容:
respPerson.setId(1L); // will work
respPerson.id = 1L; // will not work