Spring Hibernate双向ManyToMany StackOverflowError

尼克·库勒斯(Nick Kulese):

我正在尝试建立双向ManyToMany关联。

因此,我有一个名为User的实体:

import lombok.Data;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Data
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @ManyToMany(mappedBy="users")
    private List<Chat> chats = new ArrayList<>();
}

另一个叫聊天:

import lombok.Data;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Data
@Entity
public class Chat {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @ManyToMany
    @JoinTable(name = "chat_user",
        joinColumns = { @JoinColumn(name = "fk_chat") },
        inverseJoinColumns = { @JoinColumn(name = "fk_user") })
    private List<User> users = new ArrayList<>();
}

因此,当我尝试执行以下操作时:

Chat chat = new Chat();
User user = new User();

user.getChats().add(chat);
chat.getUsers().add(user); // Getting an exception!!!

得到这个:

Method trew 'java.lang.StackOverflowExceptionError' exception.
Cannot evaluate hello.models.Chat.toString()

我认为问题是:聊天具有用户,该聊天引用了具有再次引用该聊天的用户的聊天,依此类推。

那么我该如何解决呢?

MyTwoCents:

是的,永无止境的递归是正确的。

我们如何解决这个问题?可以尝试这些步骤

1。如果您toString()在提到的实体中使用过请从中删除其他实体的引用。

2。可以@JsonIgnore在关系的一侧添加,以断开链

    @ManyToMany(mappedBy="users")
    @JsonIgnore
    private List<Chat> chats = new ArrayList<>();

请参阅本文以了解更多方法

3。我注意到您正在使用Lombok,在这种情况下,请排除toString注释的属性,并且可以toString记住自定义保持点1。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

页大小调用Spring MongoDB的数据存储库的方法时的StackOverflowError大于36

java.lang.StackOverflowError与杰克逊json和spring和hibernate

保存双向ManyToMany

Spring Hibernate JPA双向OneToOne-删除时不更新ID

JPA双向关系抛出java.lang.StackOverflowError:null

Spring Boot安全性:java.lang.StackOverflowError

Spring Boot:成功注册后尝试自动登录时出现java.lang.StackOverflowError:null

Kotlin中带有JPA双向引用的StackOverflowError

双向对象的equals方法中的StackOverflowError

使用Spring MVC,JPA和Hibernate添加ManyToMany

使用嵌入式模型的Spring Boot Hibernate ManyToMany Relation

使用@OneToMany和@ManyToOne映射的Hibernate StackOverflowError

什么是StackOverflowError?

所有提供程序之后的Spring Security java.lang.StackOverflowError异常

使用@ManyToMany时出现StackOverflowError

Hibernate JPA @OneToOne双向在Spring-Boot中不起作用

Hibernate中的ManyToMany映射引用错误(api生成的表名)表Spring Boot

Spring MVC + Hibernate:带有@manytomany关系复选框的表单

Hibernate在查询时抛出StackOverflowError

什么是StackOverflowError?

Hibernate和Spring MVC中实体的双向映射

Hibernate使用@ManyToMany双向关系导致无限循环

双向的ManyToMany双向上的EntityForm

使用Spring Mybatis时Tomcat开始抛出java.lang.StackOverflowError

Spring Boot StackOverFlowError:空

JPA 使用双向 @OneToMany 抛出 java.lang.StackOverflowError

带有 StackOverflowError 的 Spring tomcat 启动异常

在 Spring Data Jpa 中获取 OneToMany 映射实体时出现 StackOverflowError

Spring JPA/Hibernate - OneToMany 双向问题