java - Play/Ebean 未获取 ManyToOne 相关对象的所有属性

标签 java playframework ebean

我有一个 Play 2.2 应用程序,并且正在使用 ebean 3.2.2。 我有两个表:UserModel 和 Schedule。一个 UserModel 可以有一个 Schedule,一个 Schedule 可以有多个 UserModel。 这些类如下所示:

@Entity
public class UserModel extends Model {
    @Id
    public String email;
    public String other, attributes;

    @ManyToOne
    public Schedule defaultSchedule;

    @OneToMany
    public List<Task> tasks;
}

@Entity
public class Schedule extends Model {

    @Id
    public Long id;

    @OneToMany
    public List<UserModel> owners;

    public String other, attributes;
}

我将像这样更新 UserModel:

userModel.defaultSchedule = newSchedule;
userModel.update();

当我运行查询时:

UserModel.find.where().eq("email", email).findUnique()

我查看 UserModel.defaultSchedule 并发现仅填充了 Id。 其余字段均为空,这就是我要解决的问题。

这让我特别困惑的原因是我还有另一门课:

@Entity
public class Task extends Model {

    @Id
    public Long taskId;
    public Boolean completed;

    @ManyToOne
    public UserModel assignedTo;

}

当我像这样查询这种类型的对象时:

Task.find.where().eq("assignedTo.email", email).eq("completed", false).findList();

我发现 Task.assignedTo 的所有字段都已填充(不仅仅是 Id)。
为什么在本例中填充了字段,而不是第一种情况?

最佳答案

解决方案在于我如何进行查询。我能够通过向查询添加提取来检索相关对象的所有属性:

UserModel.find.fetch("defaultSchedule").where().eq("email", email).findUnique();

关于java - Play/Ebean 未获取 ManyToOne 相关对象的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32647435/

相关文章:

java - 如何获得 future list 的结果

java - 如何为以下场景 hibernate 编写多对一关系

java - 拦截渲染的 HTML

java - play框架2.4 ebean [PersistenceException : Property [] not found on models. SearchContent]

h2 - Play 框架 2.5 的 Ebean 和 H2 配置问题

java - JAVA音频数据流0s

javax.sound.sampled.UnsupportedAudioFileException 使用 javazoom 播放 OGG 文件

java - Swagger 与 Play2 集成

Java Play Framework 2.6 不返回 `Access-Control-Allow-Origin` CORS header

java - Play Framework 应用程序在第 6 行不断抛出空指针