zoukankan      html  css  js  c++  java
  • 关于SpringDataJpa中测试出现StackOverflowError错误问题

    在使用SpringDataJpa进行多表查询时,使用导航查询,每次都出现

    StackOverflowError错误,

    经过查找资料,网上百度,终于找到原因,

    StackOverflowError 是栈溢出的意思
    当我自己遇到这个问题百度出来的造成原因几乎都是说 递归或者死循环导致。 我自己的项目却是因为写了实体类中的toString方法导致。

      因为所做的测试是多对多的测试,两边的实体类中都有对方对象的集合对象,

        //其中一个实体类
        public class Hobby implements java.io.Serializable {
            // Fields
            private Integer hobbyId;
            private String hobbyName;
            private Set<Nurse> nurses = new HashSet<Nurse>();
        }
        //另一个一个实体类
        public class Nurse implements java.io.Serializable {
            // Fields
            private Integer id;
            private Dept dept;
            private String name;
            private Integer age;
            private String content;
            private String datea;
            private Set<Hobby> hobbies = new HashSet<Hobby>();
        }

      可以看出俩个实体类互相都有对方的一个set集合。如果用tostring方法输出其中一个实体类Hobby,他对应的set
      集合也会输出,里面的另一个实体类Nurse也会输出,然后Nurse里面还有Hobby的set集合。这样就陷入了死循环无限互相输出。 

     解决方式之一

      删除两个实体类的toString方法

     解决方式之二

      输出之前将其中的 set集合设置为null
      Nurse nurse = new Nurse();
      nurse.setNurses(null);  

     解决方式之三

      利用JsonConfigUtil 去除死循环工具类

      JsonConfig config = JsonConfigUtil.getConfig();
      JSONArray.fromObject(list, config);
      把要转换json格式的对象或集合放入第一个参数,
      把工具类创建的对象设置为第二个参数
      就能完成自动断开关系。去掉死循环

  • 相关阅读:
    控制流程
    表达式
    2020.2.7
    寒假自学进度六
    2020.2.6
    2020.2.5
    寒假自学进度五
    Scala初级实验
    寒假自学进度四
    Spark运行基本流程
  • 原文地址:https://www.cnblogs.com/zxgCoding/p/12230887.html
Copyright © 2011-2022 走看看