2015-10-08 58 views
0

可以說,我有一個類Employee與字段employeeIdname。這由另一個類PermanentEmployee繼承,字段爲salaryexperience。我用@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
從這我明白,它會創建兩個表。一個用於父類,具有兩列employeeIdname。另一張有四列兒童班的表格。那就是name,employeeid,salaryexperience
當我嘗試用所有四個值來堅持子對象(永久員工)時,它將插入到子表中。 只在子表。它沒有插入到父表中。
[1]這是默認行爲嗎?或者我錯過了什麼?我是否需要像@OneToOne映射這樣的實體關係?
[附註]我也試過@Inheritance(strategy = InheritanceType.JOINED)。這次爲每個子類使用Table,它爲它們創建兩個表和外鍵關係。並將其插入表中。每個具體類的休眠表表格行爲

回答

0

是的,如果您使用的是@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS),則該實體將被保存到一個表中,該表代表持久實體的類。這對性能可能很好,因爲在獲取實體實例的同時,您不必創建表連接。但是它也有缺點,例如表格沒有被標準化,修改層次結構中的父項會導致所有子表格中的變化。在大多數情況下,這個策略並不推薦,儘管它是最簡單的。

至於OneToOne,如果你的意思是,你必須提供父類和它的子類之間的關係,那麼沒有。它用於在兩個或更多實例之間建立關係,而不是用於類層次結構。

+0

然後,我應該做什麼,如果我需要的數據要堅持父母和孩子這個'每班級表'。任何工作? – Ram

+0

你必須使用不同的策略,然後jpa會爲你創建規範化表格並加入選擇。如果僅使用hibernate,您將看不到任何區別,但如果您有一些帶有選擇的本機代碼,則必須重新制作查詢以使用連接 – Stanislav