You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPA多对一关联查询时Client无法返回Trainer对象问题排查

问题原因分析
  • @JsonBackReference的特性限制:你用的@JsonManagedReference和@JsonBackReference是Jackson解决双向关联递归的一对注解,规则是@JsonManagedReference标记的属性会被正常序列化,而@JsonBackReference标记的属性会被完全忽略。所以查询Client时,它里面被@JsonBackReference标注的Trainer字段不会被序列化,自然返回结果里看不到Trainer对象。

  • 移除@JsonBackReference触发无限递归的本质:双向关联的情况下,序列化Client时会先序列化Trainer,而Trainer里又包含Client列表,每个Client又会序列化自己的Trainer,这样循环嵌套调用序列化方法,直到JVM栈内存耗尽,抛出StackOverflowError。

  • @JsonIdentityInfo适配不了Hibernate代理类:Hibernate为了实现懒加载,会给你的实体类生成动态代理(比如ByteBuddy或者CGLIB代理),这些代理类是原实体的子类。而@JsonIdentityInfo默认是基于实体的原始类来生成身份标识的,Jackson序列化代理对象时,无法正确识别它和原实体的关联关系,导致序列化失败。

内容的提问来源于stack exchange,提问作者java12399900

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:57:39