2012-04-06 234 views
1

我剛剛開始使用NetBeans IDE的JEE6,現在我正在學習帶鏈接的JPA。 我正在使用Netbeans IDE和mySQL。JPA多對多級聯刪除

我創建了2個非常簡單的表格,以多對多的關係:

table student 
int id PK 
varchar name 

table teacher 
int id PK 
varchar name 

//the mapping 
table studentTeacher 
int studentID FK 
int teacherID FK 

的studentTeacher表將學生證到教師ID,以級聯的刪除和更新。

我已經使用'從數據庫生成實體'netbeans功能,它工作正常: 我可以添加一個學生對象到我的學生表,我可以添加一個老師對象到我的老師表。

問題是,我如何創建一個'studentTeacher'實體並堅持它?或者它已經由IDE完成了?

這裏是從NetBeans中自動生成的註解:

//Student Entity annotation generated by Netbeans 7.0.1 

@Id 
@Basic(optional = false) 
@NotNull 
@Column(name = "id") 
private Integer id; 
@Size(max = 40) 
@Column(name = "name") 
private String name; 
@JoinTable(name = "studentTeacher", joinColumns = 
{ 
    @JoinColumn(name = "studentID", referencedColumnName = "id") 
}, inverseJoinColumns = 
{ 
    @JoinColumn(name = "teacherID", referencedColumnName = "id") 
}) 
@ManyToMany 
private Collection<Teacher> teacherCollection; 

謝謝!

回答

4

正確地說,它已經由JPA實現完成了,就你的情況而言:TopLink。您不需要一個實體,因爲它本身不是一個實體,它只是實體 - 關係模式所需的一個輔助表,以便建模您的多對多關係。

如果StudentTeacher之間的關係是從兩個實體的外鍵有額外的屬性分開,那麼你就需要一個額外的實體,但你已經存在的實體(StudentTeacher)將不再有不少一對多關係,但與中介StudentTeacher實體一對多/多對一。

我的建議是,如果你的模型和你的例子一樣簡單,就保持原樣。

+0

太棒了,但我怎麼填充studentTeacher表?在這種情況下真正重要的是該表格提供的映射。我很困惑,現在買一本書。 – Fernando 2012-04-06 23:22:40

+0

您需要仔細處理映射多對多關係的列表,因此,如果您將'Teacher'添加到您的'Student'實體,那麼請確保您還將'Student'實例添加到前面提到的'Teacher'。這樣做時,JPA將調用EntityManager.persist(student)'或EntityManager.persist(teacher)'(和其他任何方法相同)時執行中間表的「羣體」 – 2012-04-06 23:27:52

+0

謝謝,我會嘗試並從一開始就啓動JPA。 – Fernando 2012-04-06 23:35:07