Play/Ebean 没有获取 ManyToOne 相关对象的所有属性
Play/Ebean not fetching all attributes of ManyToOne related object
我有一个 Play 2.2 应用程序,我正在使用 ebean 3.2.2。
我有两个表:UserModel 和 Schedule。一个 UserModel 可以有一个 Schedule,一个 Schedule 可以有多个 UserModel。
这是 classes 的样子:
@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 被填充。 其余字段均为空,这就是我要解决的问题。
这让我特别困惑的原因是我还有另一个 class:
@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();
我有一个 Play 2.2 应用程序,我正在使用 ebean 3.2.2。 我有两个表:UserModel 和 Schedule。一个 UserModel 可以有一个 Schedule,一个 Schedule 可以有多个 UserModel。 这是 classes 的样子:
@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 被填充。 其余字段均为空,这就是我要解决的问题。
这让我特别困惑的原因是我还有另一个 class:
@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();