返回顶部
首页 > 资讯 > 后端开发 > Python >Java 互相关联的实体无限递归问题的解决
  • 467
分享到

Java 互相关联的实体无限递归问题的解决

2024-04-02 19:04:59 467人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录Java 互相关联的实体无限递归在Jackson2.0以前的解决办法是好好理解Java中的递归递归的思想递归的条件要素递归的算法结构递归实战举例小结一下吧Java 互相关联的实体

Java 互相关联的实体无限递归

今天在测试的时候出现了一个bug,在把关联实体序列化返回的过程中报错了,提示

Caused by: java.lang.StackOverflowError: null

这个是堆栈溢出错误,根据错误线索查找,最后发现Column和Table实体互相关联,也就是说

Column实体中有Table属性,Table实体中也有Column属性,导致了在序列化的过程中出现了死循环,无限递归,以至堆栈溢出报错。

在Jackson2.0以前的解决办法是

在关联的属性上添加


@JSONBackReference

或者


@jsonIgnore

注解中的一个即可。但是从Jackson2.0以后的版本开始,提供@JsonIdentityInfo注解实现这个问题的解决,在实体类前加注解


@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")

好好理解Java中的递归

递归的思想

把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。

一句话总结:递归就是自己调用自己。

递归的条件要素

1、递归有两个重要条件

  • 可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)
  • 存在一种简单情境,可以使递归在简单情境下退出。(递归出口)

2、递归的三要素

  • 尝试将一个问题化简到更小的规模
  • 父问题与子问题不能有重叠的部分
  • 一定有一种可以退出程序的情况

递归的算法结构

递归的常用算法伪代码如下:


func( mode){
    if(endCondition){      //递归出口
          end;
    }else{
         func(mode_small)  //调用本身,递归
    }
}

递归实战举例

递归讲起来还是有点小抽象,我们直接来看代码

1、斐波那契数的递归实现

斐波那契数列的递推公式:Fib(n)=Fib(n-1)+Fib(n-2),生成数列(1、1、2、3、5、8...)。


public static int fib(int n) throws Exception {
    if (n < 0){
        throw new Exception("请输入正确的参数");
   } else if (n == 0 || n == 1){
        return n;
   } else {
        return fib(n - 1) + fib(n - 2); // 调用自己
   }
}

2、99乘法表的递归实现


public static void mul(int n){
        if(n==1){
            System.out.println("1*1=1");
        }else {
            mul(n -1);
            for(int i=1;i<=n;i++){
                System.out.println(i + "*" + n + "=" + i*n + " ");
            }
        }
    }

小结一下吧

递归算法是一种直接或间接地调用自身的算法。如果一个问题可以解可以分解为几个子问题的解; 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样;并且存在明显的递归终止条件;那么递归将是一种不错的选择。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Java 互相关联的实体无限递归问题的解决

本文链接: https://lsjlt.com/news/154549.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java 互相关联的实体无限递归问题的解决
    目录Java 互相关联的实体无限递归在Jackson2.0以前的解决办法是好好理解Java中的递归递归的思想递归的条件要素递归的算法结构递归实战举例小结一下吧Java 互相关联的实体...
    99+
    2024-04-02
  • 解决python递归函数及递归次数受到限制的问题
    目录递归函数及递归次数受到限制求和:sum=n+n(n-1)+…+1求阶乘:n!=1x2x3…xn解决问题的办法是修改可递归的次数如何控制递归的次数第一种...
    99+
    2024-04-02
  • 原:八皇后问题的递归和非递归Java实现
    原:八皇后问题的递归和非递归实现八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名 的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线...
    99+
    2023-06-03
  • Python相互导入的问题解决
    目录前言问题→解决问题描述问题复现解决问题总结前言 Hi! 这是随笔专栏的第一篇文章。好的开始等于成功了一半。在之后的日子里,除了不定期分享实战中可总结出的小项目外,还会经...
    99+
    2024-04-02
  • C++ 函数的递归实现:如何使用递归来解决数学问题?
    递归是一种函数调用自身的编程技巧,用于解决复杂问题。在数学问题中,递归应用广泛,例如:计算阶乘:fac++torial(n) = n * factorial(n-1) if n >...
    99+
    2024-04-22
    c++ 递归 堆栈溢出
  • ​如何解决OpenStack云的互联问题
    如何解决OpenStack云的互联问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。摘要:用Neutron API建立Open...
    99+
    2024-04-02
  • 怎么使用Java递归回溯解决八皇后的问题
    这篇文章主要介绍“怎么使用Java递归回溯解决八皇后的问题”,在日常操作中,相信很多人在怎么使用Java递归回溯解决八皇后的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java递归回溯解决八皇后...
    99+
    2023-06-25
  • Java使用递归回溯完美解决八皇后的问题
    八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:...
    99+
    2024-04-02
  • 如何解决Python相互导入的问题
    本篇文章为大家展示了如何解决Python相互导入的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。问题描述两个文件间相互导入时产生了一系列错误,比如 ImportError, NameError ...
    99+
    2023-06-26
  • 怎么解决JavaScript相关的问题
    这篇文章主要讲解了“怎么解决JavaScript相关的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决JavaScript相关的问题”吧!一、如何...
    99+
    2024-04-02
  • python 非递归解决n皇后问题的方法
    复杂度可能高了点- - 也没太注意 我想了好久 也找了好久 没看到什么能够用python解决n皇后问题而且不调用递归的 因为我不太能理解递归(尤其是到n层时) 智商受限- - i...
    99+
    2024-04-02
  • 递归出现栈溢出stackoverflow的问题及解决
    目录递归出现栈溢出stackoverflow递归调用中栈溢出原因递归出现栈溢出stackoverflow 递归是个不断回调方法的过程,使方法一遍遍的压入栈中,递归次数多了,栈满了也就...
    99+
    2024-04-02
  • 怎么解决thinkphp-queue的相关问题
    这篇“怎么解决thinkphp-queue的相关问题”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“怎么解决thinkphp-queue的相关问题”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望...
    99+
    2023-06-06
  • 关于java数组与字符串相互转换的问题
    1.char数组(字符数组)->字符串 可以通过:使用String.copyValueOf(charArray)函数实现。   举例: char[] arr={'a','b...
    99+
    2024-04-02
  • C++ 递归函数的栈溢出问题如何解决?
    针对 c++++ 递归函数的栈溢出问题,解决方法有:缩小递归深度、减小栈帧大小、尾递归优化。如 fibonacci 数列函数通过尾递归优化可避免栈溢出。 C++ 递归函数的栈溢出问题如...
    99+
    2024-04-17
    c++ 递归函数
  • Mybatis无主键的关联数据去重问题如何解决
    本文小编为大家详细介绍“Mybatis无主键的关联数据去重问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis无主键的关联数据去重问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。先...
    99+
    2023-07-05
  • springboot的相互依赖报错问题怎么解决
    本篇内容介绍了“springboot的相互依赖报错问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springboot相互依赖报错...
    99+
    2023-06-29
  • 解决SpringCloudfeignGET请求无法用实体传参的问题
    目录Spring Cloud feign GET请求无法用实体传参解决办法Spring Cloud Feign异步调用传参问题方案1方案2总结Spring Cloud feign G...
    99+
    2023-01-01
    Spring Cloud feign GET请求实体传参 feign GET请求
  • python中关于py文件之间相互import的问题及解决方法
    目录问题背景实例演示问题背景 调试脚本时,遇到一个问题:ImportError: cannot import name 'A' from 'study_cas...
    99+
    2024-04-02
  • 电脑如何解决无法联网的问题
    本篇内容介绍了“电脑如何解决无法联网的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法/步骤: 在电脑键盘上按下“win”徽标键+“X...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作