我们有一个播放应用程序(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吗?
答案 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