播放2 / Ebean ManyToMany JSON结果

时间:2013-09-20 01:17:20

标签: mysql json jpa playframework ebean

我正在玩Play! 2.1.4使用Ebean / MySQL的框架。

系统基本上跟踪课程及其要求。例如,如果您想参加高级艺术,您必须首先参加常规艺术。据我所知,这是一个ManyToMany关系,但我可能是错的。

这是我的模特: @实体 公共课程{

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;

// Getters and setters ...

以下是我如何将JSON返回到我的前端:

   List<Course> courses = Ebean.find(Course.class).fetch("courseRequirements").findList();

    JsonContext jsonContext = Ebean.createJsonContext();
    return ok(jsonContext.toJsonString(courses));

但是,在JSON的“courseRequirements”键中,它会打开一个包含完整课程对象的新数组。我只想获得它需要的课程ID数组,例如: 课程要求:[3,5] 意味着:本课程要求您先修读ID 3和5的课程。

我改写了我的吸气剂:     public Set getCourseRequirements(){         设置requiredCourseIds = new HashSet();

    for(Course course : courseRequirements)
    {
        requiredCourseIds.add(course.getId());
    }
    return requiredCourseIds;
}

因为我认为Ebean会在尝试填写JSON密钥时将其拉出来,但事实并非如此。

如何更改它以便它只返回courseRequirements键的课程ID数组,而不是完整对象?

谢谢!

1 个答案:

答案 0 :(得分: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