2013-09-20 2 views
0

Я использую Play! 2.1.4 с Ebean/MySQL.Play 2/Ebean ManyToMany Результаты JSON

Система в основном отслеживает курсы и их требования. Например, если вы хотите перейти в Advanced Art, вы должны сначала воспользоваться обычным искусством. Это, как я понимаю, отношение ManyToMany, но я могу ошибаться.

Вот моя модель: @Entity общественного класса курс {

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; 

// Геттеры и сеттеры ...

Вот как я вернуть JSON в мой внешний интерфейс:

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

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

Однако в ключе «courseRequirements» в JSON он открывает новый массив с объектами полного курса в нем. Я просто хочу получить массив идентификаторов курса, которых он требует, например: courseRequirements: [3, 5] означает, что: этот курс требует сначала пройти курсы с ID 3 и 5.

Я переписал свой геттер на это: public Set getCourseRequirements() { Set requiredCourseIds = new HashSet();

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

, потому что я думал, что Ebean будет тянуть, что при попытке заполнить ключ JSON, но это не так.

Как я могу изменить его так, чтобы он возвращал только массив идентификаторов курса для ключа courseRequirements вместо полных объектов?

Спасибо!

ответ

1

Вместо toJsonString (Object о) следует использовать toJsonString (объект О, логические симпатичный, опцию JsonWriteOptions).

С помощью JsonWriteOptions «Вы можете явно указать, какие свойства должны включать в вывод JSON для корневого уровня и каждого пути».

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

+0

я смотрел на это, но как я могу использовать его, чтобы изменить значение ключа «coursePrerequisites», чтобы использовать сорбент из модели? – max1221

Смежные вопросы