【问题标题】:Play 2/Ebean ManyToMany JSON Results播放 2/Ebean 多对多 JSON 结果
【发布时间】:2013-09-25 07:01:50
【问题描述】:

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

该系统基本上会跟踪课程及其要求。例如,如果你想学习高级艺术,你必须先学习普通艺术。据我了解,这是一个多对多关系,但我可能是错的。

这是我的模型: @实体 公开课课程{

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 数组,例如: 课程要求:[3, 5] 表示:本课程要求您先学习 ID 3 和 5 的课程。

我重写了我的吸气剂: 公共设置getCourseRequirements(){ 设置 requiredCourseIds = new HashSet();

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

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

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

谢谢!

【问题讨论】:

    标签: mysql json jpa playframework ebean


    【解决方案1】:

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

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

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

    【讨论】:

    • 我看过了,但是如何使用它来更改“coursePrerequisites”键的值以使用模型中的 getter?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多