[英]@OnDelete(CASCADE) not working on bidirectional mapping (hibernate)
[英]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.