2016-08-23 69 views
1

我有兩張桌子,學生和課程有着多對多的關係。如何通過Hibernate在多對多的關係中插入關聯表?

@Entity 
public class Student { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    ... 
    @ManyToMany(mappedBy="students") 
    private List<Course> courses = new ArrayList<Course>(); 

    ... 
    // getters and setters 
} 


@Entity 
public class Course { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    ... 
    @ManyToMany 
    private List<Student> students = new ArrayList<Student>(); 

    ... 
    // getters and setters 
} 

我使用Hibernate和持久性API進行映射 比方說,我在課程表5道菜:

Id Name 
1 Course1 
2 Course2 
3 Course3 
4 Course4 
5 Course5 

學生表零條記錄開始。一旦學生插入到學生表中,即

Id Name 
1 Student1 

我還需要在CourseStudent表中插入至少一條記錄。比方說,Stduent1需要三個過程Course1,Course2和Course3,然後我需要插入:

StudentId CourseID 
1   1 
1   2 
1   3 

我現在遇到的困難是,在我的數據模型,我沒有CourseStudent類,但只學生和課程及其映射@many_to_many。此表CourseStudent由Hibernate創建和管理,其映射類CourseStudent似乎沒有必要。

在這種情況下,如何將記錄插入到模型中沒有對象映射的關聯表中?我是否必須顯式創建一個CourseStudent類才能實現此目的,以便將數據保存到關聯表中?

+0

上的映射指定級聯:http://docs.oracle.com/javaee/5/api/javax/persistence/ManyToMany.html#cascade() –

回答

2

不,你不需要。它應該像將課程添加到學生課程列表一樣簡單並更新(保存)學生。

但請記住:根據我的知識,hibernate無法自行更新雙向關係。這意味着您必須將每門課程的學生添加到學生列表中,並保存課程。

希望這有助於

+0

我這樣做,「作爲只需將課程添加到學生的課程列表中,並更新(保存)學生。「,然後檢查CourseStudent表,它根本不會改變。我是否也必須完成第二部分「你必須將每門課程的學生添加到學生名單中,並保存課程。」? – user697911

+0

我的意思是,一旦我將課程添加到學生的課程列表並更新(保存)學生,我應該看到CourseStudent表更改。對? – user697911

+0

取決於您的事務處理,您可能必須提交會話以查看數據庫中的更改。 – Rainer

相關問題