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

问题描述 投票:0回答:1

我有一个Play应用(使用ebean播放v2.3.4-),即将投入使用。这些天的测试中,我看到了一些非常奇怪的东西!有时,用于将模型持久存储在数据库中的update()方法不起作用(没有任何异常)。我正在寻找问题,直到现在我已经牢记这三个:

  1. 我使用的是update(),而不是update(id),也许是问题所在?
  2. 我使用的是不带getter / setter的公共字段,我发现有时会出现问题,我会返回null,因此稍后我将更改为私有字段+ getter / setter。但是现在,这可能是问题吗?
  3. 一旦我发现update()不能在所有对象上正常工作,我就做了activator clean,然后一切顺利。 (另一次这种清理无济于事)

例如,在我的代码中,我在一些对象上循环,在我的循环内,我更改了每个对象的属性,并为该对象调用update()。对于其中的一些,更改会持续存在,对于某些则不会!!! (这种和平的代码通过我的app/Global.java中的AKKA调度程序定期执行)

for (User respPerson : event.setup.respPersons) {
   respPerson.addNotification(notification);
   respPerson.update();
}

更新:从update()更改为update(id)不能解决问题。这是2个User实例的调试器的图片。右边的一个总是成功更新,左边的不成功...enter image description here

UPDATE2有关上述示例的更多信息:内部循环中,我向用户实例添加了一个通知(用户持有通知的List)。现在,如果我用调试器检查User实例,它的通知列表中将有一个新的Notification实例。所以一切都应该很好...然后我打电话给update(),并希望所做的更改应保留在DB中。但是在update之后,当我使用静态调用并从数据库中获得具有相同Userid时,它不包含我之前添加的通知!

这总是发生在Object的特定实例上(在上图中,ID为33的用户)。我试图在另一个Notification的这个User实例中添加一个controller,但它仍然存在。但是每次我使用计划任务在Global.java内部执行此操作时,它都不会持久化。

更新!问题已找到并解决。我将在接下来的几个小时内更新此问题。

playframework playframework-2.3 ebean
1个回答
0
投票

也许您会混合使用公共属性和获取者/设置者?如果您未在模型中创建任何getter \ setter,则Ebean(Play)会自动生成getter \ setter,否则您需要创建所有它们。您可以关闭此功能,但默认情况下它处于打开状态。

查看您的代码,并尝试识别出您始终使用相同的样式。

例如,我看到您使用respPerson.addNotification(notification);,因此还需要使用类似setId的东西:

respPerson.setId(1L); // will work 
respPerson.id = 1L;   // will not work
© www.soinside.com 2019 - 2024. All rights reserved.