繁体   English   中英

休眠双向映射不起作用

[英]Hibernate Bidirectional mapping is not working

我有两个表的两个实体。 学生与MonthAttendance有一对多的关系。 student_id是加入列。 请看下面的代码。

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

    @Id
    @Column(name="student_id")
    @GeneratedValue(strategy= GenerationType.AUTO)
    private String studentId;
/*
*More codes
*/

    @OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
    private Set<MonthAttendance> monthAttendances;
/*
*mutators
*getter and setter methods
*/

}


@Entity
@Table(name="month_attendance")
public class MonthAttendance implements Serializable {

    @Id
    @Column(name="month_year_id")
    @GeneratedValue(strategy= GenerationType.AUTO)
    private String monthYearId;
/*
*More codes
*/
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "student_id")
    private Student student;
/*
*mutators
*getter and setter methods
*/
}

我有DAO课,可以从数据库中获取学生数据。 我使用下面的代码来获取数据,

List<Student> studentList = session.createQuery("from Student").list();
List<Student> studentList = session.createQuery("from MonthAttendance").list();

两者都工作正常。 但是对象具有递归结构,如Student具有MonthAttendance,MonthAttendance具有Student,再次Student具有MonthAttendance并继续。 有什么办法可以解决这个问题? 我只需要一个学生有MonthAttendance,而我却没有学生,如果我想获得Student。 提前致谢。

为了摆脱这种递归行为,只需删除:

cascade = CascadeType.ALL

来自学生实体,例如:

@OneToMany(mappedBy = "student")
private Set<MonthAttendance> monthAttendances;

级联基本上告诉了这一点:

如果我对实体执行操作,那么我应该如何对关联实体执行操作。

我应该对它执行相同的操作吗?

让我们举个例子:

如果我尝试保存/持久化一个MonthAttendance对象,则Hibernate还将尝试对与此对象相关的Student对象进行保存/持久化操作。 为什么?

因为在Student协会下的MonthAttendance实体上,我们有CascadeType.ALL(在CascadeType.ALL下,我们有4到5种动作),这意味着每当您尝试保存/保持MonthAttendance Hibernate都会尝试执行相同的动作(保存/持久保持在我们的附案例) Student对象。

这就解释了为什么您会出现这种递归行为,因为您在关联的两面都标记了:

cascade = CascadeType.ALL

当您保存第一个实体时,它将尝试保存第二个,然后第二个尝试再次保存第一个,依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM