我们在3.1.0版中使用ebean sbt-play-ebean插件有一个play-application(2.5.10),该插件提供了ebean 8.2.3。

我们有一个(简化的)模型,看起来像这样:

@Entity
@Cache
public class User extends Model {
  @Id
  public Long id;

  @Version
  public Timestamp lastUpdated;

  public String name;
}


在Controller中,我们有以下几行:

User user = User.find.setUseCache(true).setId(id).findUnique();
user.name = "something";
user.update();


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

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

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


有用。

因此,只有不使用二级缓存,我们才能进行更新。在较旧的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

09-11 19:39
查看更多