0

我正在使用播放!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 数组,而不是完整对象?

谢谢!

4

1 回答 1

1

而不是toJsonString(Object o)你应该使用toJsonString(Object o, boolean pretty, JsonWriteOptions options)

使用 JsonWriteOptions “您可以明确说明要在 JSON 输出中包含哪些属性以用于根级别和每个路径。”

http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/text/json/JsonWriteOptions.html

于 2013-09-20T01:52:54.620 回答