У меня есть структура классов, как показано ниже
@Entity
@Table(name = "CourseGroups")
public class CourseGroup {
@Id
@GeneratedValue
long courseGroupId;
@OneToMany(mappedBy = "courseGroup")
@JsonManagedReference
List<Course> courseList;
//Getters and Setters
}
@Entity
@Table(name = "Course")
public class Course {
@Id
@GeneratedValue
long courseId;
@ManyToOne
@JoinColumn(name = "courseGroupId")
@JsonBackReference
CourseGroup courseGroup;
@OneToMany(mappedBy = "course",fetch = FetchType.LAZY)
@JsonManagedReference
List<CoursePart> courseParts;
}
@Entity
@Table(name = "courseParts")
public class CoursePart {
@Id
@GeneratedValue
long partId;
@ManyToOne
@JoinColumn(name = "courseid")
@JsonBackReference
Course course;
@ManyToMany(mappedBy = "coursePartList")
List<Subject> subjectsList;
}
Чтобы вернуть результаты REST, я создал классы DTO с почти одинаковыми полями. Мой основной мотив состоял в том, чтобы избежать бесконечного вложения объектов, когда я напрямую возвращаю сущности JPA из контроллера.
courseGroup{
groupId,
courseList:[
{
courseId ,
partList:[
{
partId,
subjectList:[ //Again Subject and So on]
}]
}
]
}
Итак, я использовал ModelMapper для сопоставления сущностей с классами DTO, но mapper модели снова вызывает get для полей List, что вызывает hibernate для загрузки списков и снова list in list и так далее. Я могу сделать @JsonIgnore, но он полностью игнорирует список объектов. Что я хочу сделать, это вернуть только определенный уровень вложенных списков, а не все вложенные списки. как
courseGroup{
groupId,
courseList:[
{
courseId ,
partList:[
{
partId, subjectId}]
}
]
}
Есть ли способ в модели картографа для отображения вложенных объектов только до определенного уровня и не завершить сам объект