弹簧数据JPA - 无限递归的双向关系
首先,这是我的实体。
球员 :
@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 以多种方式避免 Web 服务中的 StackOverflowExeption。
这很酷,除了JPA之外,其他所有实体仍然在序列化之前构造一个实体,并无限递归到另一个实体。这只是丑陋的,请求需要更长的时间。检查此屏幕截图:IntelliJ调试器
有没有办法解决它?知道我想要不同的结果,具体取决于端点。例子:
- endpoint /teams/{id} => Team={id..., members=[Player={id..., team=null}]}
- endpoint /members/{id} => Player={id..., team={id..., members=null}}
谢谢!
编辑:也许这个问题不是很清楚,给出我得到的答案,所以我会尝试更精确。
我知道可以用Jackson(@JSONIgnore,@JsonManagedReference/ @JSONBackReference等)或通过对DTO进行一些映射来防止无限递归。我仍然看到的问题是:以上两个都是后查询处理。Spring JPA返回的对象仍然是(例如)一个团队,包含玩家列表,包含团队,包含玩家列表等。
我想知道是否有办法告诉JPA或存储库(或任何东西)不要一遍又一遍地绑定实体内的实体?