我正在使用播放!2.1.4 Ebean/MySQL 框架。
该系统基本上跟踪课程及其要求。例如,如果你想学习高级艺术,你必须先学习普通艺术。据我了解,这是一个多对多关系,但我可能是错的。
这是我的模型:@Entity public class Course {
public static Model.Finder<Long,Course> find = new Model.Finder<Long,Course>(Long.class, Course.class);
@Id
private Long id;
private String name;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable( name = "course_course",
joinColumns = @JoinColumn(name = "course_id1"),
inverseJoinColumns = @JoinColumn(name = "course_id2"))
private Set<Course> courseRequirements = new HashSet<Course>();
private String availability;
private Long category;
@Lob
private String description;
@Lob
private String otherRequirements;
private Long bucketId;
// getter 和 setter...
以下是我将 JSON 返回到前端的方法:
List<Course> courses = Ebean.find(Course.class).fetch("courseRequirements").findList();
JsonContext jsonContext = Ebean.createJsonContext();
return ok(jsonContext.toJsonString(courses));
但是,在 JSON 中的“courseRequirements”键中,它会打开一个包含完整课程对象的新数组。我只想获取它所需的课程 ID 的数组,例如: courseRequirements: [3, 5] 表示:本课程要求您先学习 ID 为 3 和 5 的课程。
我重写了我的getter: public Set getCourseRequirements() { Set requiredCourseIds = new HashSet();
for(Course course : courseRequirements)
{
requiredCourseIds.add(course.getId());
}
return requiredCourseIds;
}
因为我认为 Ebean 在尝试填写 JSON 密钥时会拉取它,但事实并非如此。
如何更改它,使其仅返回 courseRequirements 键的课程 ID 数组,而不是完整对象?
谢谢!