Playframework ebean update()有时不会持久化对象

Playframework ebean update()有时不会持久化对象,playframework,playframework-2.3,ebean,Playframework,Playframework 2.3,Ebean,我有一个play应用程序play v2.3.4-与即将投入服务的ebean一起使用。在我这些天的测试中,我看到了一些非常奇怪的事情!有时,在数据库中持久化模型的更新方法在没有任何异常的情况下都无法工作。我一直在寻找问题,直到现在,我已经想到了以下三点: 我使用的是update而不是updateid,也许这就是问题所在? 我使用的是没有getter/setters的公共字段,我已经看到这有时会产生问题,并且返回null,因此我稍后将更改为private fields+getter/setters。

我有一个play应用程序play v2.3.4-与即将投入服务的ebean一起使用。在我这些天的测试中,我看到了一些非常奇怪的事情!有时,在数据库中持久化模型的更新方法在没有任何异常的情况下都无法工作。我一直在寻找问题,直到现在,我已经想到了以下三点:

我使用的是update而不是updateid,也许这就是问题所在? 我使用的是没有getter/setters的公共字段,我已经看到这有时会产生问题,并且返回null,因此我稍后将更改为private fields+getter/setters。但就目前而言,这会成为问题吗? 一旦我发现updatedoes不能对所有对象正常工作,我就对activator进行了清理,之后一切都很顺利。另一次,这次清洁没有帮助 例如,在我的代码中,我在一些对象上有一个循环,在我的循环中,我更改每个对象的属性,并调用该对象的更新。对他们中的一些人来说,这些变化会持续下去,而对一些人来说则不然!!!通过我的app/Global.java中的AKKA调度程序定期执行这种代码和平

更新: 从update更改为updateid并没有解决问题。 下面是两个用户实例的调试器的图片。右边的总是成功更新,左边的不是。。。

更新2 有关上述示例的更多信息: 在循环内部,我向用户实例添加了一个通知,用户持有一个通知列表。现在,如果我用调试器检查用户实例,它的通知列表中会有一个新的通知。所以一切都应该很好。。。然后我调用update,并期望这些更改应该持久化到数据库中。但是在更新之后,当我使用静态调用并从DB获取具有相同id的用户时,它不包含我之前添加的通知

对于上图中object的特定实例,id为33的用户,总是会发生这种情况。我试图在另一个控制器中向该用户实例添加通知,但它得到了持久化。但每次我在Global.java中使用计划任务执行此操作时,它都不会持久化


更新!问题被发现并解决了。我将在接下来的几个小时内更新这个问题。

也许您将公共属性和getter\setter混合使用?如果未在模型中创建任何getter\setter,则可以播放自动生成getter\setter,否则需要创建所有getter\setter。您可以关闭此功能,但默认情况下它处于启用状态

看看你的代码,试着认识到你总是使用相同的风格

例如,我看到您使用resperson.addNotificationnotification;因此,您还需要使用setId之类的东西:


我的一些模型的所有字段都有getter/setter,一些模型的所有公共字段都没有getter/setter。我不确定play如何发现是否存在任何getter/setter,但我假设它们使用Java反射,例如搜索set+fieldName。我用更多信息更新了我的问题。你还认为二传手/接球手是个问题吗?是什么解决了这个问题?
for (User respPerson : event.setup.respPersons) {
   respPerson.addNotification(notification);
   respPerson.update();
}
respPerson.setId(1L); // will work 
respPerson.id = 1L;   // will not work