问题描述
我想我在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;
解决方法
您已在两个方向上定义了关系,因此尝试递归评估每个属性始终是一个无限循环。
instructor -> instructorDetail -> instructor -> instructorDetail -> ...
您需要从toString
,equals
和hashCode
实现中排除其中一个指示,否则,请更改它们以打破链条。哪种方法取决于您,以及对象相等性的定义。
或者,只是不要在两个方向上都定义它们。