【问题标题】:Can't update cached Ebean Entity无法更新缓存的 Ebean 实体
【发布时间】:2017-03-14 09:13:55
【问题描述】:

我们有一个播放应用程序 (2.5.10),它使用 3.1.0 版中的 ebean sbt-play-ebean 插件,它提供了 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();

执行此操作后,数据库中的“名称”字段不会更新。唯一更改的字段是“lastUpdated”。 通过查询日志,我们可以看到即使是更新查询也只包含要更新的“lastUpdated”字段,而不包含“name”。

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

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

它有效。

因此,只有在我们不使用 L2 缓存的情况下,我们才能执行更新。在较旧的 ebean 版本(与 play 2.3 捆绑在一起)中,这很好用。

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

我们是否缺少更新从缓存加载的 bean 的内容?

【问题讨论】:

  • 你试过markAsDirty吗?

标签: java caching ebean playframework-2.5


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多