首页 > 其他分享 >Spring Lombok 实体类死循环问题

Spring Lombok 实体类死循环问题

时间:2022-10-08 14:04:56浏览次数:43  
标签:实体类 Spring ToString 使用 toString Lombok Data 死循环


在 Spring JPA 1 对多查询的时候出现死循环的问题。

如下图所示:

Spring Lombok 实体类死循环问题_实体类

所有的配置都是正确的的,就是没有办法获得数据,并且出现死循环

问题和解决

因为使用lombak的 @Data ,在toString()方法中产生死循环。

因为我们使用了 @Data 注解。

Spring Lombok 实体类死循环问题_后端_02

Spring Lombok 实体类死循环问题_后端_03

 

所有让 lombok 定义的 @ToString 类将会实现一个 toString() 方法。

在默认的情况下,将会指向类的名称,同时和每一个字段。

例如在使用 lazy ​​@OneToMany​​ 方法调用 hashCode() 的时候,fetch 可能有所有的实体类,这个对应用程序的运行可能产生非常大的性能问题。

同时,如果你在事务以外使用的话,可能会得到 LazyInitializationException 异常。

如果查询一个User实体,并打印,打印调用的是toString() 方法,toString()方法里面又有关联Dept对象。 所以导致 User 和子对象之间的两个对象互相调用并打印,形成一个递归调用,最后堆栈溢出。

基于上面的考虑,我们认为 ​@EqualsAndHashCode 和​@Data​ 不应该应用在 JPA 的实体类上使用

​@ToString​​​ 还是可以使用的,因为我们可以使用 ​​@ToString.Exclude​​​ 来设置不需要的字段或者使用 ​​@ToString(onlyExplicitlyIncluded = true​​​ ) 来移除类, 对于 non-lazy 字段,我们可以使用​​@ToString.Include​​ 注解。

例如我们的解决方案就是在 JPA 实体类中只使用

  • @Getter
  • @Setter

注解。

Spring Lombok 实体类死循环问题_java_04

基于上面的原因,这也是很多人建议使用 Lombok 的原因。


标签:实体类,Spring,ToString,使用,toString,Lombok,Data,死循环
From: https://blog.51cto.com/cwikius/5737453

相关文章

  • druid-spring-boot-starter整合hive与hadoop的排除类
    hive-jdbc和jetty冲突,所以在hive-jdbc中对jetty进行排除就OK<exclusions> <exclusion> <groupId>org.eclipse.jetty.aggregate</groupId> <artifactId>*</artifactI......
  • springMVC执行流程
    1.浏览器将请求发送到前端控制器;2.前端控制器通过处理器映射器将请求绑定在一个处理器上;3.将请求绑定的处理器返回给前端控制器;4.前端控制器通过处理器适配器将处理器......
  • spring.jpa.open-in-view is enabled by default. Therefore, database queries may b
    在搭建微服务的过程中,发现控制台一直在报这个警告日志。本着研究的目的,查看了下源码[WARN][JpaBaseConfiguration$JpaWebConfiguration][219]:spring.jpa.open-in-viewi......
  • SpringBootServletInitializer的作用
    https://blog.csdn.net/luckyzsion/article/details/81135438?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendF......
  • spring boot集成redis基础入门
    redis支持持久化数据,不仅支持key-value类型的数据,还拥有list,set,zset,hash等数据结构的存储。可以进行master-slave模式的数据备份更多redis相关文档请查看redis官方文......
  • 从SpringBoot启动,阅读源码设计
    目录一、背景说明二、SpringBoot工程三、应用上下文四、资源加载五、应用环境六、Bean对象七、Tomcat服务八、事件模型九、配置加载十、数据库集成十一、参考源码服务启......
  • 一个C#开发者学习SpringCloud搭建微服务的心路历程
    前言SpringCloud很火,很多文章都有介绍如何使用,但对于我这种初学者,我需要从创建项目开始学起,所以这些文章对于我的启蒙,帮助不大,所以只好自己写一篇文章,用于备忘。SpringC......
  • SpringBoot加载自动配置类的流程
    自定义过starter的同学应该都知道,自动配置类需要用EnableAutoConfiguration注解修饰,并且需要将自动配置类配置在spring.factories中。但自动配置类是如何被SpringBoot加......
  • 整合springboot
    案例1@RestControllerpublicclassUserInfoHandler{/***编程式校验*@paramuserInfo*@return*/@GetMapping("/addUser")......
  • 史上最全Spring Cloud Alibaba--Nacos教程(涵盖负载均衡、配置管理、多环境切换、配置
    1Nacos安装Nacos是Alibaba微服务生态组件中的重要组件之一,主要用它实现应用的动态服务发现、配置管理、服务管理。​​github.com/alibaba/spr…​​1.1Nacos概要Nacos是......