【发布时间】: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