Spring JPA 错题集解决案例
作者:烟雨戏江南 发布时间:2022-03-26 22:44:03
标签:Spring,JPA,错题集
一、No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor
详细报错
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.example.sbjdemo.pojo.User["car"]->com.example.sbjdemo.pojo.Car$HibernateProxy$CCqaurKR["hibernateLazyInitializer"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.13.5.jar:2.13.5]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1300) ~[jackson-databind-2.13.5.jar:2.13.5]
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) ~[jackson-databind-2.13.5.jar:2.13.5]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:46) ~[jackson-databind-2.13.5.jar:2.13.5]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:29) ~[jackson-databind-2.13.5.jar:2.13.5]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.5.jar:2.13.5]
...........
触发场景
当fetch设置为懒加载的时候(fetch = FetchType.LAZY
),进行查询操作
错误原因
car在转化为json的时候,序列化失败了(大概就是这个意思吧)
解决办法
在序列化失败的实体类上添加 @JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
二、java.lang.StackOverflowError: null
详细报错
java.lang.StackOverflowError: null
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_212]
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_212]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_212]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) ~[na:1.8.0_212]
at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[na:1.8.0_212]
at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[na:1.8.0_212]
at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[na:1.8.0_212]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_212]
触发场景
两个关联的实体类都有外键字段,且都有关联注解,如:@OneToOne、@OneToManay、@ManyToOne、@ManyToMany
错误原因
两个相关联的对象互相调用并打印,形成一个递归调用,最后堆栈溢出
解决办法
两个关联的实体中的关联对象上,都加上一个 @JsonIgnore 注解,表示在序列化的时候,忽略这个属性(网上有说@ToString(exclude={"userList"})
可以规避,但是我没有测试成功,大家可以自己试一下) 如下图所示
@OneToOne
@JoinColumn(name = "car_id")
@JsonIgnore
private Car car;
三、No class com.example.sbjdemo.pojo.User entity with id 18 exists!
详细报错
org.springframework.dao.EmptyResultDataAccessException: No class com.example.sbjdemo.pojo.User entity with id 18 exists!
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.lambda$deleteById$0(SimpleJpaRepository.java:173) ~[spring-data-jpa-2.7.10.jar:2.7.10]
at java.util.Optional.orElseThrow(Optional.java:290) ~[na:1.8.0_212]
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.deleteById(SimpleJpaRepository.java:172) ~[spring-data-jpa-2.7.10.jar:2.7.10]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_212]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_212]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_212]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_212]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[spring-data-commons-2.7.10.jar:2.7.10]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.7.10.jar:2.7.10]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.7.10.jar:2.7.10]
at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:530) ~[spring-data-commons-2.7.10.jar:2.7.10]
触发场景
执行数据删除操作
错误原因
删除的数据在数据库中不存在
来源:https://juejin.cn/post/7225148494620147773/
0
投稿
猜你喜欢
- import java.io.*;import java.text.SimpleDateFormat;import java.util.*;
- 什么是自动装箱,拆箱先抛出定义,Java中基础数据类型与它们的包装类进行运算时,编译器会自动帮我们进行转换,转换过程对程序员是透明的,这就是
- 通常在一份Excel文档中可能包含多个内容不同的工作表,而他们的默认名都为Sheet1、Sheet2、Sheet3等。为了方便我们的查找和操
- java 中newInstance()方法和new关键字的区别* 它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新
- 网上找了几个,写的都不太适合,有的写出来了,也没有给出参考的算法链接。这样就导致了如果产生错误我们无法排查(不懂原理怎么排查对吧)。如果在使
- Mybatis基础回顾与高级应用数据库:mysql5.7jdk:15引入依赖<!--引入依赖--> &
- 前言Java作为一种平台无关性的语言,其主要依靠于Java虚拟机——JVM,我们写好的代码会被编译成class文件,再由JVM进行加载、解析
- Gson是一个Java库,用来实现Json和Java对象之间的相互转换。Gson是一个托管在https://github.com/googl
- 数组array和集合的区别:(1) 数值是大小固定的,同一数组只能存放一样的数据。(2) java集合可以存放不固定的一组数据(3) 若程序
- 样例代码在讲 Flutter 的盒子模型前,先看看HTML 中的盒子模型。如下图所示,一个页面元素包括了与父级容器的外边距(margin),
- springboot获取项目目录路径springboot部署后获取项目的路径//获取跟目录(绝对路径)File path = new Fil
- 题目要求思路:模拟Javaclass Solution { public int maximumSwap(int
- 1、输出矩形以此矩形案例(4行,9列的矩形)为例public static void main(String[] args) {  
- 本文实例为大家分享了Java实现猜数字游戏的具体代码,供大家参考,具体内容如下完成猜数字游戏需要实现以下几点:获得一个随机数作为“答案数”;
- Mybatis获取参数值的两种方式:${},#{}${}本质:字符串拼接,注意:单引号要加上#{}:本质:占位符赋值一、 Mybatis获取
- SpringBoot集成Redis 1.添加redis依赖<dependency> <groupId
- 如下所示:package com.unionx.wanxue; import java.util.Map; import java.util
- 前言我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。没错,它们是spring的基石,得益于它们的
- OverView今天在复习的时候,突然复习到我们的相机操作,但是对于相机操作,对于我来说比较复杂的是对于权限的操作。所有我们需要对我们的相机
- static修饰符是java里面非常常用的一个东西,用法也非常多。然而,在kotlin里竟然没有这个东西!那该如何替代呢?本文就总结了下ja