iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何解决使用@ManyToMany查询数据时的死循环问题
  • 894
分享到

如何解决使用@ManyToMany查询数据时的死循环问题

2023-06-21 22:06:08 894人浏览 安东尼
摘要

本篇内容主要讲解“如何解决使用@ManyToMany查询数据时的死循环问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决使用@ManyToMany查询数据时的死循环问题”吧!使用@Man

本篇内容主要讲解“如何解决使用@ManyToMany查询数据时的死循环问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决使用@ManyToMany查询数据时的死循环问题”吧!

    使用@ManyToMany查询数据时的死循环

    初学使用spring data jpa,将问题记录

    以User 和Role为例,两者为双向的多对多关系,即可以通过User查询到Role信息,也可以通过Role查询到User信息

    首先要明白为什么会出现死循环这个问题,造成这个死循环的原因是因为查询User时,包含了Role属性,Role中又需要查询除user属性,这个不是spring data jpa 的问题,而是只要代码里互相关联都会造成这种情况,解决这种情况的方法我大概研究出了两种

    一、在Role中加上@JSONIgnore注解

    代码如下

    User.java

    package com.example.demo.entity;import lombok.Data;  import javax.persistence.*;import java.util.Set; @Entity@Data@Table(name = "t_user")public class User {     @Id    private String userId;     private String username;     private String passWord;     @ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)    @JoinTable(name = "t_user_role",            joinColumns = @JoinColumn(name = "user_id",referencedColumnName = "user_id"),            inverseJoinColumns = @JoinColumn(name = "role_id",referencedColumnName = "role_id"))    private Set<Role> roleSet;  }

    Role.java

    package com.example.demo.entity; import com.fasterxml.jackson.annotation.jsonIgnore;import lombok.Data; import javax.persistence.*;import java.util.Set; @Entity@Table(name = "t_role")@Data@EqualsAndHashCode(exclude = {"userSet"})public class Role {     @Id    @GeneratedValue    private String roleId;     private String roleName;     private String remark;     @JsonIgnore    @ManyToMany(fetch = FetchType.LAZY,mappedBy = "roleSet")    private Set<User> userSet; }

    很多初学者可能对@ManyToMany这个注解存在一些疑惑,下面给出我的理解仅供参考

    @ManyToMany代表多对多的关联关系

    cascade 属性

    • CascadeType.ALL:级联包含所有持久化方法

    • CascadeType.PERSIST只有A类新增时,会级联B对象新增。若B对象在数据库存(跟新)在则抛异常(让B变为持久态)

    • CascadeType.MERGE指A类新增或者变化,会级联B对象(新增或者变化)

    • CascadeType.REMOVE只有A类删除时,会级联删除B类;

    @JoinTable关联中间表,如User与Role的中间表为t_user_role

    • name:中间表名

    • JoinColumns:中间表与第一张表关联的外键(第一张表在user中即为user表)

    • inverseJoinColumns:与JoinColumns类似,为第二张表关联的外键

    fetch

    • FetchType.EAGER:立即加载

    • FetchType.LAZY:懒加载

    mappedBy = "roleSet":roleSet几位User表中的List<Role>属性名

    以上为第一种解决方法

    二、将双向关联改为单向关联

    删除Role表中的如下代码即可

    @JsonIgnore    @ManyToMany(fetch = FetchType.LAZY,mappedBy = "roleSet")    private Set<User> userSet;

    只不过单向关联时不能通过Role查询到User的信息

    单向多对多@ManyToMany的使用和理解

    • 单向多对多:就是一个实体类可以获取到另外一个实体类

    • 多对多:一个员工可以拥有多个角色,一个角色可以对应多个员工

    //角色单向多对多:配置中间表    //多对多:一个员工可以拥有多个角色,一个角色可以对应多个员工    @ManyToMany(fetch = FetchType.LAZY)//配置懒加载    //JoinTable是中间表表名,joinColumns指定中间表中关联自己ID的字段,  joinColumn是列名,inverseJoinColumns表示中间表中关联对方ID的字段。    @JoinTable(name = "employee_role",joinColumns = @JoinColumn(name = "employee_id"),            inverseJoinColumns = @JoinColumn(name = "role_id"))    @JsonIgnore //生成json是忽略这个属性(数据大多,全部拿到没有意义,还有可能造成死循环)    //将角色设置进来 有多个角色不能重复    private Set<Role> roles = new HashSet<>();

    到此,相信大家对“如何解决使用@ManyToMany查询数据时的死循环问题”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: 如何解决使用@ManyToMany查询数据时的死循环问题

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

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

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 如何解决使用@ManyToMany查询数据时的死循环问题
      本篇内容主要讲解“如何解决使用@ManyToMany查询数据时的死循环问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决使用@ManyToMany查询数据时的死循环问题”吧!使用@Man...
      99+
      2023-06-21
    • 解决使用@ManyToMany查询数据时的死循环问题
      目录使用@ManyToMany查询数据时的死循环一、在Role中加上@JsonIgnore注解二、将双向关联改为单向关联单向多对多@ManyToMany的使用和理解使用@ManyTo...
      99+
      2024-04-02
    • 如何解决HashMap并发时会引起死循环的问题
      这篇文章给大家分享的是有关如何解决HashMap并发时会引起死循环的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。今天研读Java并发容器和框架时,看到为什么要使用ConcurrentHashMap时,其中有...
      99+
      2023-06-15
    • 如何解决Mybatis查询时数据丢失的问题
      这篇文章主要为大家展示了“如何解决Mybatis查询时数据丢失的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Mybatis查询时数据丢失的问题”这篇文章吧。Mybatis查询时数据...
      99+
      2023-06-28
    • 详解如何解决使用JSON.stringify时遇到的循环引用问题
      程序员在日常做TypeScript/JavaScript开发时,经常需要将复杂的JavaScript对象通过JSON.stringify序列化成json字符串,保存到本地以便后续具体...
      99+
      2024-04-02
    • Mybatis查询时数据丢失的问题及解决
      目录Mybatis查询时数据丢失经过排查得出结论解决办法Mybatis查询部分字段漏查问题(mysql)Mybatis查询时数据丢失 公司里的实体类和mapper文件均由mybati...
      99+
      2024-04-02
    • 如何解决PHP里大量数据循环时内存耗尽的问题
      本篇文章为大家展示了如何解决PHP里大量数据循环时内存耗尽的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。最近在开发一个PHP程序时遇到了下面的错误:PHP Fatal er...
      99+
      2023-06-17
    • 如何解决springboot数据库查询时出现的时区差异问题
      目录springboot数据库查询时出现的时区差异1.在连接数据库的配置上我们添加一项2.直接在boot配置文件中增加jackson配置springboot new Date()时区...
      99+
      2023-01-06
      springboot数据库查询 数据库查询时区差异 springboot查询
    • C语言数组越界引发的死循环问题解决
      目录一、引入二、代码缺陷三、为什么会死循环?四、补充说明五、总结一、引入 下面的程序在VS编译器会出现什么问题?运行结果是什么?为什么? #include <stdio.h&g...
      99+
      2022-11-13
      C语言 数组越界
    • Mysql如何解决数据库N+1查询问题
      这篇文章主要介绍Mysql如何解决数据库N+1查询问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!简介在orm框架中,比如hibernate和mybatis都可以设置关联对象,比如...
      99+
      2024-04-02
    • 使用JSON.stringify时遇到的循环引用问题怎么解决
      这篇文章给大家分享的是有关使用JSON.stringify时遇到的循环引用问题怎么解决的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。程序员在日常做TypeScript/JavaScript开发时,经常需要将复杂的...
      99+
      2023-06-14
    • 如何解决mybatis-plus查询耗时慢的问题
      这篇文章主要介绍如何解决mybatis-plus查询耗时慢的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mybatis-plus 查询耗时慢1、现象查出30000多条id然后用EntityWrapper&nbs...
      99+
      2023-06-20
    • 如何解决Java循环依赖的问题
      今天就跟大家聊聊有关如何解决Java循环依赖的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。最近看到一个问题:如果有两个类A和B,A类中有一个B的对象b,B类中有一个A的对象a,...
      99+
      2023-06-02
    • 使用Python循环读取数据时内存不足如何解决
      使用Python循环读取数据时内存不足如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.read()与readlines():随手搜索python读写文件的教程,很...
      99+
      2023-06-15
    • 如何解决php数据库查询结果编码的问题
      PHP是一种流行的Web编程语言,可以用于编写动态网页和应用程序。在实际应用中,PHP经常需要与数据库进行交互,进行数据的查询和处理。然而,在使用PHP从数据库中获取结果时,可能会遇到编码的问题,这通常会导致出现乱码。那么,如何解决php数...
      99+
      2023-05-14
      php 数据库 编码
    • 如何解决R语言循环慢的问题
      小编给大家分享一下如何解决R语言循环慢的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!什么是R语言R语言是用于统计分析、绘图的语言和操作环境,属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计...
      99+
      2023-06-14
    • python中的循环结构问题如何解决
      这篇文章主要讲解了“python中的循环结构问题如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中的循环结构问题如何解决”吧!python循环结构Python中循环结构有两...
      99+
      2023-07-05
    • 如何解决css中animate不循环的问题
      小编给大家分享一下如何解决css中animate不循环的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! css中可利用animation-iteration...
      99+
      2024-04-02
    • MyBatisPlus 大数据量查询慢的问题解决
      目录常规查询流式查询MyBatis 流式查询接口游标查询大数据量操作的场景大致如下: 数据迁移数据导出批量处理数据 在实际工作中当指定查询数据过大时,我们一般使用分页查询的方式一页一...
      99+
      2023-02-05
      MyBatis Plus 查询慢 MyBatisPlus 大数据量查询
    • WordPress使用钩子进行主题开发时如何避免死循环
      这篇文章给大家分享的是有关WordPress使用钩子进行主题开发时如何避免死循环的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。WordPress 使用钩子进行主题开发时避免死循环WordPress 开发时,我们经...
      99+
      2023-06-14
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作