2013-04-02 49 views
3

問題我已經超過了如何使用方法的問題,請讓我解釋一下:休眠:多對多連接繼承策略方法

兩個班,學生和家庭作業。學生班有許多家庭作業的清單。家庭作業班有很多學生完成它的清單。

一些示例代碼,以防萬一一個快速的許多有人搜索到大量的實例:

@Entity(name="STUDENT") 
@Inheritance(strategy=InheritanceType.JOINED)//Note this join type, no redundancy  
public class Student { 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private int id; 

@ManyToMany(mappedBy="studentList")//Note how this is mapped 
private Collection<Homework> homeworkList = new ArrayList<Homework>(); 

@Entity(name="HOMEWORK") 
@Inheritance(strategy=InheritanceType.JOINED)  
public class Homework { 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private int id; 

@ManyToMany 
private Collection<Student> studentList = new ArrayList<Student>(); 

Hibernate的就執行,並使用主鍵到每個家庭作業給學生,反之亦然地圖創建一個表,student_homework 。

我怎麼可能使用Hibernate來保存一個'homeworkCompleted'布爾例如。 這個值不能存在於學生課上,因爲有很多工作,與家庭作業班相同,因爲有很多學生。

一種可能的解決方案是可能手動進入數據庫,創建另一列,每次保存條目時都可以選擇更新完成或稍後再做。

我不禁想起有一個非常簡單的解決方案,即hibernate可以照顧並使一切正常,同時還有一點應用邏輯。

提前許多感謝, 院長

+0

我不太確定如何使處於休眠這項工作,但你可以把一個標誌在你的多對多映射表完成。 (假設它是像studentId一樣,homeworkId你可以很容易地添加一個完整的標誌,也許是一個日期)。我還沒有見過這種在休眠中使用過的構造,但它可以做到這一點。 –

+0

@Daniel Williams謝謝,這是一個主意。雖然一個日期不僅展示了切入時間,而且還有一個切入時間,所以可以讓我啓動並運行。 – Dean

回答