@OneToMany查询陷入循环引用的解决方案

目录
  • @OneToMany查询陷入循环引用问题
    • 问题报错如下
    • 解决方案:按需改为LAZY即可
  • JPA@OneTOMany查询在ruturn的时候出现错误
    • java.lang.IllegalStateException原因和解决方法
    • 具体的情况如下
    • 解决

@OneToMany查询陷入循环引用问题

问题报错如下

主要信息为:

wrapping Result set representing update count of 4>

以及:

exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause

原本配置:

报错原因是两个类都使用了急加载的方式,就会导致一直查找外键的实体类而陷入循环,从而报错。

解决方案:按需改为LAZY即可

@OneToMany( fetch = FetchType.LAZY)

success result:

JPA@OneTOMany查询在ruturn的时候出现错误

java.lang.IllegalStateException原因和解决方法

在controller返回数据到统一json转换的时候,出现了json infinite recursion stackoverflowerror的错误,即json在将对象转换为json格式的数据的时候,出现了无限递归调用的情况。

具体的情况如下

A类中,有个属性:List<B> b, A与B的关系为 OneToMany;在B类中,有属性A a,引用到A中的字段id,并作为外键。hibernate查询结果正常,可以看到返回的A对象中,有b参数值,但在json转换的时候就出现了无限递归的情况。

个人分析,应该是json在序列化A中的b属性的时候,找到了B类,然后序列化B类,而B类中有a属性,因此,为了序列化a属性,json又得去序列化A类,如此递归反复,造成该问题。

同时值得注意的是必须重写其中一个类toString方法,去除其中另一个类的内容,否则也会造成无限递归的产生。

解决

在B类中a的getter setter方法上加注解@JsonBackReference,只在setter方法上加@JsonBackReference也够了。

如果是使用lombok注解,可以直接在B类的a字段上添加注解@JsonBackReference

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

(0)

相关推荐

  • Java中的OneToMany的使用方法

    写在开头 使用jhipster声明的OneToMany在One的一方DTO中是没有与Many的DTO的映射关系的, 为了在One的一方DTO中使用Many的DTO, 使用以下三步解决此问题. 步骤 1. OneDTO 中的"mark 1"处为自己写的一对多的关系, 此处变量名称不能与实体One中相应的变量名称一致,否则编译失败. 2. OneMapper 中的"mark 2"处 uses属性添加ManyMapper. 2. OneMapper 中的"mar

  • SpringBoot Data JPA 关联表查询的方法

    SpringBoot Data JPA实现 一对多.多对一关联表查询 开发环境 IDEA 2017.1 Java1.8 SpringBoot 2.0 MySQL 5.X 功能需求 通过关联关系查询商店Store中所有的商品Shop,商店对商品一对多,商品对商店多对一,外键 store_id存在于多的一方.使用数据库的内连接语句. 表结构 tb_shop tb_store 实体类,通过注解实现 1.商店类Store.java package com.gaolei.Entity; import ja

  • spring jpa ManyToMany原理及用法详解

    1.java和jpa 中所有的关系都是单向的.这个关系数据库不同,关系数据库,通过外键定义并查询,使得反向查询总是存在的. 2.JPA还定义了一个OneToMany关系,它与ManyToMany关系类似,但反向关系(如果已定义)是ManyToOne关系. OneToMany与JPA中ManyToMany关系的主要区别在于,ManyToMany总是使用中间关系连接表来存储关系, OneToMany可以使用连接表或者目标对象的表引用中的外键源对象表的主键. @OneToMany(cascade =

  • @OneToMany查询陷入循环引用的解决方案

    目录 @OneToMany查询陷入循环引用问题 问题报错如下 解决方案:按需改为LAZY即可 JPA@OneTOMany查询在ruturn的时候出现错误 java.lang.IllegalStateException原因和解决方法 具体的情况如下 解决 @OneToMany查询陷入循环引用问题 问题报错如下 主要信息为: wrapping Result set representing update count of 4> 以及: exception [Request processing fa

  • golang包循环引用的几种解决方案总结

    目录 1. golang 包循环引用的几种解决方案 1.1. 前言 1.2. 新建公共接口包(父包), 将需要循环调用的函数或方法抽象为接口 1.3. 新建公共组合包(子包), 在组合包中组合调用 1.4. 全局存储需要相互依赖的函数, 通过关键字进行调用 1.5. 不需要回调结果的可以通过事件总线 (eventBus) 解耦 总结 1. golang 包循环引用的几种解决方案 1.1. 前言 golang 为了加速编译, 不允许包循环引用.通常来说, 只要你的包规划得好, 严格规范单向调用链

  • vue如何解决循环引用组件报错的问题

    问题由来 最近在做项目的时候遇到使用循环组件,因为模式一样,只有数据不一样.按照普通组件调用格式来做的时候总是报错,错误信息为[Vue warn]: Unknown custom element: <selfile> - did you register the component correctly? For recursive components, make sure to provide the "name" option. 解决方案 查询了网上各种资料之后,发现是

  • python如何在循环引用中管理内存

    python中通过引用计数来回收垃圾对象,在某些环形数据结构(树,图--),存在对象间的循环引用,比如树的父节点引用子节点,子节点同时引用父节点,此时通过del掉引用父子节点,两个对象不能被立即释放 需求: 如何解决此类的内存管理问题? 如何查询一个对象的引用计数? import sys sys.getrefcount(obj) # 查询引用计数必多 1 ,因为object也引用 查询对象 如何解决内存管理问题? 通过weakref,进行弱引用,当del时候,不再引用,在引用方添加weakref

  • Python中循环引用(import)失败的解决方法

    前言 最近在开发智能家居项目hestia-rpi项目中,由于代码结构层级划分不合理,导致了循环引用(import)module失败的问题,错误如下: Traceback (most recent call last):   File "./main.py", line 8, in &lt;module&gt;     from hestiarpi.library.server import server   File "/home/pi/server/hest

  • 关于NodeJS中的循环引用详解

    最近在用node的时候排查一个问题排查了半天,最终发现是循环引用导致的问题,故在此记录一下. 场景复现 出现问题场景比较简单,一共四个类: parent.ts child.ts child_2.ts util.ts export abstract class Parent { abstract hello(): string; } import {Parent} from "./parent"; export class Child extends Parent { hello():

  • vue 解决循环引用组件报错的问题

    做项目时遇到使用循环组件,因为模式一样,只有数据不一样.但是按照普通的组件调用格式来做时报错,错误信息为Unknown custom element: <pop> - did you register the component correctly? For recursive components, make sure to provide the "name" option. 查询了官方文档,还有其他的资料,发现是循环调用组件时,组件比vue实例后创建,官方文档里写组件

  • javascript深拷贝、浅拷贝和循环引用深入理解

    一.为什么有深拷贝和浅拷贝? 这个要从js中的数据类型说起,js中数据类型分为基本数据类型和引用数据类型. 基本类型值指的是那些保存在栈内存中的简单数据段,即这种值是完全保存在内存中的一个位置.包含Number,String,Boolean,Null,Undefined ,Symbol. 引用类型值指的是那些保存在堆内存中的对象,所以引用类型的值保存的是一个指针,这个指针指向存储在堆中的一个对象.除了上面的 6 种基本数据类型外,剩下的就是引用类型了,统称为 Object 类型.细分的话,有:O

  • 详解如何解决使用JSON.stringify时遇到的循环引用问题

    程序员在日常做TypeScript/JavaScript开发时,经常需要将复杂的JavaScript对象通过JSON.stringify序列化成json字符串,保存到本地以便后续具体分析. 然而如果JavaScript对象本身包含循环引用,则JSON.stringify不能正常工作,错误消息: VM415:1 Uncaught TypeError: Converting circular structure to JSON 解决方案,使用下面这段来自这个网站的代码,定义一个全局cache数组,每

  • 详解在springmvc中解决FastJson循环引用的问题

    我们先来看一个例子: package com.elong.bms; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSON; public class Test { public static void main(String[] args) { Map<String, Student> maps = new HashMap<

随机推荐