2012-01-27 240 views
2

我想在項目中使用如下定義的hibernate對象。在沒有表映射的情況下繼承Hibernate對象

@Table(name = "Parent") 
class Parent{ 

    int id; 
    String name; 

} 

@Table(name = "Child") 
class Child extends Parent{ 
    String schoolNo; 
} 

但是在數據庫中; 這兩張表沒有關係。

父表的列是; ID,名稱

子表列是; ID,名稱和schoolNo

如果我使用

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 

當我發送一個查詢父對象,冬眠的小孩和父母表使用UNION但我想只從父表中選擇。

如果我用

@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 

休眠想要一個鑑別列。

我需要hibernate發送每個類的選擇查詢到它的表。

此致敬禮。

+0

爲什麼在表之間沒有關係時定義繼承策略? – Perception 2012-01-27 13:16:56

+0

我明白你對一個愚蠢的建築的想法。其實這些都不是桌子。這些視圖產生了很多表組合。相同的字段,但數據來自真正不同的表格。實際上,對於開發人員而言,結果對象是相同的,但有一點區別我希望解釋清楚。 – 2012-01-27 13:24:22

+0

你有沒有試過只使用@Inheritance? – 2012-01-27 14:39:14

回答

2

TABLE_PER_CLASS這裏是正確的策略。

Hibernate在兩個表上生成一個聯合查詢,但這應該仍然有效,這很奇怪。在錯誤表上的子查詢不會找到任何東西,所以結果是正確的。這聽起來像是Hibernate的子類查詢生成中的一個錯誤。

+0

看起來像真,但「不會找到任何東西」並不是真的,正如我之前所說,這些是視圖,並使用一些共享表進行查詢,我試着從兩個表中真正列出值。 – 2012-01-30 07:01:40

+0

只有當父母和孩子都使用相同的ID時,情況纔會如此。情況並非如此。這是否發生? – 2012-01-30 13:25:22

+0

不幸的是 – 2012-01-30 14:44:50

0

在類似的情況下,我在父表上使用@Inheritance(strategy = InheritanceType.JOINED)

見在Hibernate文檔的詳細信息:http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#d0e1168

+0

如果我使用JOINED策略,hibernate生成的SQL顯示爲「Select * from Parent,Child其中Parent.id = Child.id(+),但我只需要」從*選擇子*「或僅從」父*選擇*「 – 2012-01-27 15:47:59