У меня есть родительское (Program) пожо, имеющее отношения многие ко многим со своими детьми (подписчик).
Проблема заключается в том, что при сериализации Программы она также сериализует Подписчиков Программы, что включает сериализацию их Программ, что включает сериализацию их Подписчиков, до тех пор, пока она не сериализует каждую Программу и Подписчика в базе данных.
ERD выглядит так: Программа <-> Абонент
Это означает, что то, что было возвращено крошечным блоком данных (json) размером 17 КБ, стало возвращением 6,9 МБ. Таким образом, в свою очередь, уходит время на сериализацию данных, а затем возвращает их.
Почему мои родители возвращают детей, возвращают родителей, возвращающих детей? Как я могу остановить это, чтобы получать подписчиков только для каждой Программы? Я предполагаю, что я сделал что-то не так с моими аннотациями, возможно? Я хотел бы сохранить отношения многие ко многим, но без этого глубоко вложенного поиска данных.
(Примечание. Ранее я пытался добавить столько ленивых аннотаций, сколько смогу найти, просто чтобы посмотреть, помогает ли это. Это не так. Возможно, я тоже поступаю неправильно?)
Program.java
@Entity
@Table(name="programs")
public class Program extends Core implements Serializable, Cloneable {
...
@ManyToMany()
@JoinTable(name="program_subscribers",
joinColumns={@JoinColumn(name="program_uid")},
inverseJoinColumns={@JoinColumn(name="subscriber_uid")})
public Set<Subscriber> getSubscribers() { return subscribers; }
public void setSubscribers(Set<Subscriber> subscribers) { this.subscribers = subscribers; }
Subscriber.java
@Entity
@Table(name="subscribers")
public class Subscriber extends Core implements Serializable {
...
@ManyToMany(mappedBy="subscribers")
public Set<Program> getPrograms() { return programs; }
public void setPrograms(Set<Program> programs) { this.programs = programs;
}
Осуществление
public Collection<Program> list() {
return new Programs.findAll();
}