在jpa和hibernate的一对多和多对多查询的时候,常常会出现死循环的情况。

出现这种情况主要是在json序列化的时候,出现循环引用的情况,与后台查询的语句无关。所以只要在json序列化的时候,进行处理就可以了。

本文使用json工具进行处理序列化问题:

package bos.utils;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;import java.util.List;public class JsonUtils {//strings序列化出现循环引用的字段public static String objecttojson(Object object,String[] strings) {JsonConfig jsonConfig=new JsonConfig();jsonConfig.setExcludes(strings);JSONObject fromObject = JSONObject.fromObject(object, jsonConfig);String json=fromObject.toString();return json;}public static String arraytojson(List list,String[] strings ){JsonConfig jsonConfig=new JsonConfig();jsonConfig.setExcludes(strings);JSONArray fromObject = JSONArray.fromObject(list,jsonConfig);String json=fromObject.toString();return json;}
}

处理之前的处理代码和结果

   @RequestMapping("/list")@ResponseBodypublic PageBean list(int page, int rows){Pageable pageable= PageRequest.of(page-1,rows);Page<Function> rolePage = functionService.findAll(pageable);PageBean pageBean=new PageBean();pageBean.setCurrentPage(page);pageBean.setPageSize(rows);pageBean.setTotal((int) functionService.count());pageBean.setRows(rolePage.getContent());//防止出现死循环
//        String objecttojson = JsonUtils.objecttojson(pageBean, new String[]{"roles","parentFunction","children"});
//        return objecttojson;return pageBean;}

出现错误:

修改后代码:

    @RequestMapping("/list")@ResponseBodypublic String list(int page, int rows){Pageable pageable= PageRequest.of(page-1,rows);Page<Function> rolePage = functionService.findAll(pageable);PageBean pageBean=new PageBean();pageBean.setCurrentPage(page);pageBean.setPageSize(rows);pageBean.setTotal((int) functionService.count());pageBean.setRows(rolePage.getContent());//防止出现死循环String objecttojson = JsonUtils.objecttojson(pageBean, new String[]{"roles","parentFunction","children"});return objecttojson;
//        return pageBean;}

处理结果:

总结:对于多对对和一对多的双方关联,会出现循环引用的情况。解决方法基本如下

  1. 将双方关联改成一方关联也能解决死循环的问题,但是这种方法不太推荐
  2. 采用本文的方法,在序列化之前剔除循环引用的字段
  3. 使用@JsonIgnoreProperties注解进行解决,本人尝试过好像不太行,如果有小伙伴会的话,可以联系我。

解决jpa和hibernate的json序列化死循环问题相关推荐

  1. 解决Python自带的json序列化工具不能序列化datetime类型数据问题

    解决Python自带的json序列化工具不能序列化datetime类型数据问题 参考文章: (1)解决Python自带的json序列化工具不能序列化datetime类型数据问题 (2)https:// ...

  2. jpa 多层嵌套一对多_JPA一对多、多对多json序列化死循环问题解决

    Task import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import javax.persistence.*; impor ...

  3. jpa映射json_如何使用JPA和Hibernate映射JSON集合

    jpa映射json 介绍 开源的hibernate-types项目允许您将Java对象或Jackson JsonNode为JPA实体属性. 最近,由于我们的杰出贡献者,我们添加了对类型安全集合的支持, ...

  4. 如何使用JPA和Hibernate映射JSON集合

    介绍 开源的hibernate-types项目允许您将Java对象或Jackson JsonNode为JPA实体属性. 最近,感谢我们的杰出贡献者,我们添加了对类型安全集合的支持,该集合也可以作为JS ...

  5. .NET解决[Serializable] Attribute引发的Json序列化k_BackingField

    在WebAPI中的WebApiConfig直接加入如下配置 有问题找谷歌

  6. SpringBoot之解决一对一、多对一、多对多等关联实体在JSON序列化/输出时产生的无限递归死循环问题(infinite recursion)

    SpringBoot之解决一对一.多对一.多对多等关联实体在JSON序列化/输出时产生的无限递归死循环问题(infinite recursion) 参考文章: (1)SpringBoot之解决一对一. ...

  7. 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json

    1..Net开源Json序列化工具Newtonsoft.Json中提供了解决序列化的循环引用问题: 方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore 方式2: ...

  8. Redis学习篇3_事务及其监控(锁)、Jedis、SpringBoot整合Redis、RedisTemplate的json序列化、RedisUtil工具类

    目录 事务及其监控(锁) Jedis SpringBoot整合Redis RedisTemplate 默认RedisTemplate来源 关于中文序列化问题 RedisUtil工具类 一.事务及其监控 ...

  9. 【Go】自定义json序列化

    一.忽略字段 我们知道,通过tag,可以有条件地实现定制Go JSON序列化的方式,比如json:"abc,omitempty", 当字段的值为空的时候,我们可以在序列化后的数据中 ...

  10. JPA和Hibernate的关系

    转载自:https://www.cnblogs.com/amoyzhu/p/5937717.html JPA Java Persistence API,是Java EE 5的标准ORM接口,也是ejb ...

最新文章

  1. np.reshape 中的 -1 参数
  2. 澎思科技新出行人再识别(ReID)算法,刷新三大数据集最高记录
  3. 友盟统计集成_友盟+智能超链U-Link,助力开发者拥有更极致的分享体验_互联网_科技快报...
  4. IndirectmodificationofoverloadedelementofXXXhasnoeffect的解决办法
  5. windows系统 ping Telnet等系统自带命令无法使用原因及解决方法
  6. Vue.js 使用 Swiper.js 在 iOS 11 时出现错误
  7. AliSQL 配置安装
  8. 数字滤波器设计之一:巴特沃斯(Butterworth)滤波器
  9. html做彩色方格,超级炫酷,美图秀秀制作超漂亮彩色格子字图文教程
  10. nginx通过url跳转到另外的一个url上
  11. Rect、RectF方法解析
  12. 如何将视频上传到网站服务器,如何将本地视频上传到云服务器
  13. Ae 入门系列之二:素材的导入与管理
  14. AT32 MCU Audio 24bit例程
  15. 蓝桥杯专题之并查集篇
  16. 80岁的我选择重出江湖
  17. 机架惠普服务器型号,惠普HP DL160G6机架式服务器
  18. 怎么样才能cad快速看图操作
  19. 分享一波学习资料福利,赶紧收藏!!!
  20. 记Google应用内商品(消耗品)支付小坑

热门文章

  1. pandas 数据分析 相关性_Pandas库学习笔记2-Pandas数据特征分析
  2. matlab中单位格式,[转载]matlab中的数据显示格式-format
  3. 周长相等的正方形面积一定相等_周长和面积一直是三年级孩子的易失分点,家长要把好关!...
  4. 线性可分支持向量机与硬间隔最大化
  5. cmake和make区别
  6. 罗马仕php30重量,认真测评 篇三:罗马仕sence8P+两年使用报告
  7. Springboot配置devtools实现热部署
  8. c++常用备忘(持续更新)
  9. 操作系统课设 Nachos 实验四、五:Nachos 的文件系统、扩展 Nachos 的文件系统
  10. 【状压dp】【POJ2288】Islands and Bridges【Hamilton路】