【发布时间】:2010-02-08 05:07:27
【问题描述】:
我有一个父母(程序)pojo,与他们的孩子(订阅者)有多对多的关系。
问题是当它序列化一个程序时,它也会序列化程序的订阅者,这涉及到序列化他们的程序,这涉及到序列化他们的订阅者,直到它序列化数据库中的每个程序和订阅者。
ERD 看起来像:程序 订阅者
这意味着返回的 17KB 数据块 (json) 变成了 6.9MB。因此反过来又会浪费时间序列化数据然后返回。
为什么我的父母送孩子回来父母送孩子?我怎样才能阻止这种情况,以便我只获得每个程序的订阅者?我假设我的注释做错了,也许?我想保持多对多关系,但没有这种深度嵌套的数据检索。
(注意:我之前尝试过添加尽可能多的懒惰注释,看看是否有帮助。它没有。也许我也做错了?)
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();
}
【问题讨论】: