首先,这是我的实体。
播放器:
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class,
property="id")
public class Player {
// other fields
@ManyToOne
@JoinColumn(name = "pla_fk_n_teamId")
private Team team;
// methods
}
团队:
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class,
property="id")
public class Team {
// other fields
@OneToMany(mappedBy = "team")
private List<Player> members;
// methods
}
正如许多主题已经说明的那样,您可以使用 Jackson 以多种方式避免 WebService 中的 StackOverflowExeption。
这很酷,除了 JPA 在序列化之前仍然构造一个无限递归到另一个实体的实体。这很丑陋,因为请求需要更长的时间。检查此屏幕截图:IntelliJ 调试器
有没有办法解决它?知道我想要不同的结果取决于端点。例子 :
- 端点/teams/{id} => Team={id..., members=[Player={id..., team=null }]}
- 端点/members/{id} => Player={id..., team={id..., members=null }}
谢谢!
编辑:也许问题不是很清楚,给出我得到的答案,所以我会尽量准确。
我知道可以使用 Jackson(@JSONIgnore、@JsonManagedReference/@JSONBackReference 等)或通过映射到 DTO 来防止无限递归。我仍然看到的问题是:以上都是查询后处理。Spring JPA 返回的对象仍然是(例如)一个 Team,包含玩家列表、包含团队、包含玩家列表等。
我想知道是否有办法告诉 JPA 或存储库(或任何东西)不要一遍又一遍地绑定实体内的实体?