簡體   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