首先,这是我的实体。
玩家 :
@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 debugger
有没有办法解决它?我想根据端点获得不同的结果。例如:
- 端点/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或存储库(或任何其他东西)不要一遍又一遍地绑定实体内的实体?