无法更新缓存的 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