无法更新缓存的Ebean实体

时间:2017-03-14 09:13:56

标签: java caching ebean playframework-2.5

我们有一个播放应用程序(2.5.10)使用版本3.1.0中提供ebean 8.2.3的ebean sbt-play-ebean插件

我们的模型(简称)看起来像这样:

@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"字段要更新,但不是"名称"。

现在,如果我们将选择用户的行更改为

User user = User.find.setUseCache(false).setId(id).findUnique();

它有效。

因此,只有当我们不使用L2缓存时,我们才能进行更新。在较旧的ebean版本(与游戏2.3捆绑在一起)中,这很好用。

不使用L2缓存不是一种选择,因为我们在更复杂的星座上存在这个问题,这些星座依赖于缓存。

我们缺少更新从缓存加载的bean吗?

1 个答案:

答案 0 :(得分:0)

所以,对于那些也会偶然发现这个问题的人来说:这是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