2012-07-08 119 views
0

說1有這樣的簡單的結構休眠TABLE_PER_CLASS繼承查詢

@Entity 
@Inheritance(strategy = Table_Per_Class) 
class A { 
@Id 
private a; 
private b; 
} 

@Entity 
class B extends A{ 
private c; 
} 

@Entity 
class C extends A{ 
private d; 
} 

目前:

A類成員可變因素是私有的,這意味着他們不會被B類和C類繼承。換句話說,B和C類不會有a和b的單獨副本。即使這樣我們也可以看到Hibernate爲數據庫中的B和C表中的a和b創建了單獨的列(和值)。我無法理解這部分。請幫助我。

回答

0

B延伸A.因此B是A.由於A具有ab字段,所以B也具有它們。

一個對象的狀態是由它所具有的字段集合,加上它的超類所具有的字段集合,以及超類的超類字段集合等組成的。而這與Hibernate無關。

如果一個水果有一種顏色,並且如果一根香蕉是一種水果,那麼一根香蕉就會有一種顏色。由於Hibernate堅持香蕉的狀態,它必須保持其顏色。顏色字段在Fruit中是私人的這一事實並沒有什麼區別。

+0

但它是一個衆所周知的事實,私人領域不是繼承..甚至Java規範說.. ..不是? – user1496397 2012-07-08 15:48:02

+0

它們不能被子類訪問,但是它們是子類實例狀態的一部分。沒有它的顏色,水果沒有意義,所以沒有它,香蕉就沒有意義。如果香蕉在其狀態中沒有該字段,如果在香蕉上調用公共'getColor()'方法(返回水果的私有顏色字段)如何工作? – 2012-07-08 16:36:21