无法更新缓存的 Ebean 实体
Can't update cached Ebean Entity
我们有一个播放应用程序 (2.5.10) 使用 ebean sbt-play-ebean 插件 3.1.0 版本提供 ebean 8.2.3
我们的模型(简单地)如下所示:
@Entity
@Cache
public class User extends Model {
@Id
public Long id;
@Version
public Timestamp lastUpdated;
public String name;
}
在控制器中,我们有以下几行:
User user = User.find.setUseCache(true).setId(id).findUnique();
user.name = "something";
user.update();
执行此操作后,字段 "name" 不会在数据库中更新。唯一更改的字段是 "lastUpdated"。
通过查询日志,我们可以看到即使是更新查询也只包含要更新的 "lastUpdated" 字段,而不是 "name".
现在,如果我们将选择用户的行更改为
User user = User.find.setUseCache(false).setId(id).findUnique();
有效。
所以只有当我们不使用 L2 缓存时,我们才能执行更新。在较旧的 ebean 版本(与 play 2.3 捆绑在一起)中,这工作正常。
不使用 L2 缓存不是一种选择,因为我们在依赖缓存的更复杂的星座上遇到了这个问题。
我们是否缺少更新从缓存加载的 bean 的内容?
所以,对于少数也会偶然发现这个问题的人来说:这是 ebean 中的一个错误。
这里有更多信息和重现步骤
https://github.com/ebean-orm/ebean/pull/1039
https://github.com/ebean-orm/ebean/issues/1040
希望这会在未来得到修复,这样我们就可以手动更新到最新的 ebean 版本。
编辑:问题已在以下版本中解决:http://mvnrepository.com/artifact/com.typesafe.play/play-ebean_2.11/3.2.0
我们有一个播放应用程序 (2.5.10) 使用 ebean sbt-play-ebean 插件 3.1.0 版本提供 ebean 8.2.3
我们的模型(简单地)如下所示:
@Entity
@Cache
public class User extends Model {
@Id
public Long id;
@Version
public Timestamp lastUpdated;
public String name;
}
在控制器中,我们有以下几行:
User user = User.find.setUseCache(true).setId(id).findUnique();
user.name = "something";
user.update();
执行此操作后,字段 "name" 不会在数据库中更新。唯一更改的字段是 "lastUpdated"。 通过查询日志,我们可以看到即使是更新查询也只包含要更新的 "lastUpdated" 字段,而不是 "name".
现在,如果我们将选择用户的行更改为
User user = User.find.setUseCache(false).setId(id).findUnique();
有效。
所以只有当我们不使用 L2 缓存时,我们才能执行更新。在较旧的 ebean 版本(与 play 2.3 捆绑在一起)中,这工作正常。
不使用 L2 缓存不是一种选择,因为我们在依赖缓存的更复杂的星座上遇到了这个问题。
我们是否缺少更新从缓存加载的 bean 的内容?
所以,对于少数也会偶然发现这个问题的人来说:这是 ebean 中的一个错误。
这里有更多信息和重现步骤
https://github.com/ebean-orm/ebean/pull/1039
https://github.com/ebean-orm/ebean/issues/1040
希望这会在未来得到修复,这样我们就可以手动更新到最新的 ebean 版本。
编辑:问题已在以下版本中解决:http://mvnrepository.com/artifact/com.typesafe.play/play-ebean_2.11/3.2.0