我有一个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/

10-10 07:30