当前位置: 首页 > 知识库问答 >
问题:

Java Spring boot JPA循环引用

冷善
2023-03-14

使用MySQL、Java、Spring Boot和JPA

我有两个对象,用户和模块。

一个用户可以有多个模块,一个模块可以有多个用户。

模块的结构如下:

@Entity
@Table(name = "module")
public class Module {
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    @ManyToMany
    @JoinTable(name="module_users",
       joinColumns = @JoinColumn(name="module_id"),
       inverseJoinColumns =  @JoinColumn(name = "user_id")
    )
    private Set<User> users = new HashSet<>();

用户的结构如下:

@Entity
@Table(name = "user")
public class User implements Serializable {
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY) 
    public Long id;
    public String name;
    private String email;
    @JsonIgnore
    @ManyToMany(mappedBy = "users")
    public Set<Module> modules = new HashSet<>();

在调用模块时,使用@JsonIgnore注释确实“起作用”,但理想情况下,我还需要调用用户及其模块。有什么建议可以支持这两种方法,而不会因循环引用而崩溃?

共有2个答案

傅琦
2023-03-14

使用这两个注释@JsonManagedReference和@JsonBackReference

裁判:http://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion

@Entity
@Table(name = "module")
public class Module {
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    @ManyToMany
    @JoinTable(name="module_users",
       joinColumns = @JoinColumn(name="module_id"),
       inverseJoinColumns =  @JoinColumn(name = "user_id")
    )
    @JsonBackReference
    private Set<User> users = new HashSet<>();

A user is structured the following way:

@Entity
@Table(name = "user")
public class User implements Serializable {
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY) 
    public Long id;
    public String name;
    private String email;
    @JsonManagedReference
    @ManyToMany(mappedBy = "users")
    public Set<Module> modules = new HashSet<>();
阎功
2023-03-14

在这种情况下,您可以使用DTO检查此处

 类似资料:
  • 问题内容: 在正在进行的项目中,人们编写了服务类来访问DAO。几乎每个业务对象都具有使用自己的DAO的自己的服务。在某些服务上,我们使用对其他服务的引用。目前,人们正在实例化构造函数内部所需的服务。 但是现在,我遇到了麻烦,因为服务A需要服务B而服务B需要服务A,因此对任一构造函数的调用都会导致堆栈溢出… 示例(伪代码): 您将如何解决?使用单例模式? 谢谢 问题答案: Spring框架通过使用依

  • 一个实用的垃圾收集器大体上应该满足以下条件 一、消除悬空指针和内存泄露 二、不能给程序运行带来过高的额外开销,一般来说要控制在10% 三、尽量减少停顿时间,使得运行平稳 四、内存管理方面局部性尽量好 其中第一条没什么好说的,肯定要符合,至于第四条,当然也很重要,局部性做好了可以成倍提高运行速度,不过,如果都是内存操作,就算没做好速度一般也可以接受了,在老式的系统中,由于会用磁盘等外部存储扩展内存,

  • 问题内容: 给定一个以复杂的,循环的方式相互引用的类实例的集合:垃圾收集器是否可能无法释放这些对象? 我隐约记得过去这是JVM中的问题,但我 认为 这在几年前已解决。但是,在jhat中进行的一些调查显示,循环引用是我现在面临的内存泄漏的原因。 注意:我一直给人以JVM能够解析循环引用并从内存中释放这种“垃圾岛”的印象。 但是,我提出这个问题只是为了看看是否有人发现了任何异常。 问题答案: 循环引用

  • 本文向大家介绍C++中的循环引用,包括了C++中的循环引用的使用技巧和注意事项,需要的朋友参考一下 虽然C++11引入了智能指针的,但是开发人员在与内存的斗争问题上并没有解放,如果我门实用不当仍然有内存泄漏问题,其中智能指针的循环引用缺陷是最大的问题。 我们可以看到在出main函数作用域之前两个指针指向的内存并没有释放(指针指向的对象没有调用析构函数),我门把当前的引用数打印出来为2这个没有问题,

  • 我有下面的安全配置类(在底部),最近升级到; Spring安全(3.2.6.释放) 我开始看到这些错误信息,现在我所有的集成测试都以同样的错误失败; 原因:org。springframework。豆。工厂BeanCreationException:创建名为“securityConfig”的bean时出错:自动连线依赖项的注入失败;嵌套的异常是org。springframework。豆。工厂Bean

  • 我有圆形参考的问题。 我有Rest Webservices,它会将对象返回到前端,问题是当我试图返回具有多个引用的对象时,结果会得到无限的响应,从而生成 这些对象是由Hibernate代码生成自动生成的,我需要在后端有循环引用,我只需要在使用Jackson将信息发送到前端之前删除它。 控制器方法标头为: 我没有做任何明确的事情来转换为杰克逊,我是一个新手,我认为杰克逊自动解决了这个问题。

  • 问题内容: 我正在编写一个应用程序,以便在对等网络中进行一些分布式计算。在定义网络时,我有两个类P2PNetwork和P2PClient。我希望这些是通用的,因此具有以下定义: 与P2PClient一起定义setNetwork(T network)的方法。我希望用这段代码描述的是: P2PNetwork由某种类型的客户端组成 P2PClient只能属于其客户端与该客户端具有相同类型的网络(循环引用

  • 问题内容: 我有一个对象,该对象具有对另一个对象的循环引用。考虑到这些对象之间的关系,这是正确的设计。 为了显示 不出所料,当我尝试使用Json序列化计算机或客户对象时遇到了一个问题。我不确定是如何解决此问题的,因为我不想破坏计算机和客户对象之间的关系。解决此问题有哪些选择? 编辑 目前,我正在使用Controller基类提供的Json方法。因此,我正在做的序列化基本如下: 问题答案: 更新: 不