Spring Boot-如何在JPA OneToOne中处理无限递归

问题描述

我有两个实体,一个是学生,一个是房间:

学生:

@Entity
@Table(name = "Student")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    long id;

    ...

    @JsonManagedReference
    @OnetoOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "room_id",referencedColumnName = "id")
    private Room room;

    ...

房间:

@Entity
@Table(name = "Room")
public class Room {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    long id;

    ...

    @JsonBackReference
    @OnetoOne(mappedBy = "room")
    private Student student;

    ...

我和很多人一样面临着同样的问题:尝试在控制器中检索Student时,存在无限递归。 (学生->房间->学生->房间->...。)

我已经尝试使用@JsonManagedReference@JsonBackReference,但是它并没有任何改变,我真的需要Student中的空间才能在前端的同一张桌子上显示它。 / p>

处理此问题的最佳方法是什么?

我考虑在不使用Student的情况下创建一个实体RoomShortDTO,但这会增加我(简单)应用程序的复杂性,并且还会降低性能,因为我必须在每次API调用时都映射对象。

我还可以向“房间”实体中的“学生”添加一个@JsonIgnore,但是我还需要在前端列表“房间”中有一个表格及其相关的学生。

还有另一个更好的解决方案吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...