Я использую 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 вместо полных объектов?
Спасибо!
я смотрел на это, но как я могу использовать его, чтобы изменить значение ключа «coursePrerequisites», чтобы использовать сорбент из модели? – max1221