Hibernate不断循环获取objcets

问题描述

我想我在Hibernate以及我如何编写实体方面做错了,因为当我尝试获取一个包含另一个对象的对象时,它们开始一遍又一遍地相互理解。同样,在调用应该返回字符串中所有字段的toString方法时,我也遇到了stackoverflow错误

Instructor只能有一个InstructorDetail和多个Course,它的运行情况与预期的差不多,但是有些问题。

教练班

@Entity
@Table(name="instructor_table")
public class Instructor {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="instructor_id")
    private int instructorId;
    
    @Column(name="instructor_name")
    private String instructorName;
    
    @OnetoOne(mappedBy="instructor",cascade = CascadeType.PERSIST)
    private InstructorDetail instructorDetail;
    
    @OnetoMany(mappedBy="instructor",cascade = CascadeType.PERSIST)
    private List<Course> courses;

InstructorDetail类

@Entity
@Table(name="instructor_detail_table")
public class InstructorDetail {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="instructor_detail_id")
    private int instructorDetailId;
    
    @Column(name="instructor_class")
    private String instructorDetailClass;
    
    @OnetoOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="instructor_id")
    private Instructor instructor;
    

课程课程

@Entity
@Table(name="course_table")
public class Course {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="course_id")
    private int courseId;
    
    @Column(name="course_class")
    private String course_class;
    
    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="instructor_id")
    private Instructor instructor;

Endless loop getting entities on Imgur.

解决方法

您已在两个方向上定义了关系,因此尝试递归评估每个属性始终是一个无限循环。

instructor -> instructorDetail -> instructor -> instructorDetail -> ...

您需要从toStringequalshashCode实现中排除其中一个指示,否则,请更改它们以打破链条。哪种方法取决于您,以及对象相等性的定义。

或者,只是不要在两个方向上都定义它们。