2012-12-03 64 views
1

我有一個名爲'Department'的實體和另一個名爲'student'的實體。我知道這個部門會有很多學生,並且在數據庫中這兩個表格之間應該有聯繫。但在我的項目中,數據庫表已經存在,部門和學生表之間沒有關係(外鍵)。Hibernate中的ManyToOne關係,不在數據庫中

在實體類,student.java,有寫作的關係,

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = 'DeptId', nullable = false, insertable = false, updatable = false) 
Department department 

我感到困惑這個現有的代碼。

當我寫了一個測試,我取由DEPTID從DB部門,並設置學生實體,

student.setDepartment(department); 

這不填充在學生表中的數據庫列「DEPTID」。

既然沒有學生收集處,我無法設置學生爲,

department.addStudents(student); 

我不知道我們是否能堅持沒有數據庫中的表之間的關係的@ManyToOne關係。

請讓我知道,這樣學生表中的「DEPTID」欄填入正確的數據,我可以怎樣解決這個問題。

由於提前, BS

+0

一起使用,而不是混淆自己的,你爲什麼不去做一個簡單的事情?通過將外鍵應用到引用「DEPARTMENT」表的主鍵的「STUDENT」表中,在數據庫中建立一對多關係(DEPARTMENT => STUDENT)。如果數據庫沒有適當的約束,映射在Hibernate中可能不能正常工作。 – Lion

回答

1

你[R有

@JoinColumn(name = 'DeptId', nullable = false, insertable = false, updatable = false) 而不是你爲什麼不嘗試

@JoinColumn(name = 'DeptId', nullable = false)

休眠不會檢查你是把映射約束是否有效。在數據庫級別。它只是假定它是有效的,並根據該假設執行查詢。

+0

謝謝..它工作:) – user184794

0

嗨對不起回答你的問題這麼晚,但我認爲,答覆同樣可以幫助其他人。現在你說表格已經存在於數據庫中,如果他們haven't yet got some data那麼我建議你drop他們,激活你的Table Generation Strategy在你的persistence.xml文件到Create,在這種情況下,它會重新創建那些表與你想要的關係列。不要忘記在Department.java課上使用@OneToMany註釋來表示其接收許多學生的能力。它與@ManyToOne

相關問題