Hibernate對繼承關(guān)系的對應(yīng)主要有三種策略:
對每個類對應(yīng)一個表: 這樣在COMPANY一方不能設(shè)置SET屬性; 不能進(jìn)行查詢, 只能對每個類進(jìn)行單獨的查詢! 容易在多對一的一方產(chǎn)生冗余數(shù)據(jù)。而且產(chǎn)生冗余字段(E.G Company <-- --> Employee)
只對父類設(shè)定對應(yīng)的表: 在父類內(nèi)設(shè)定子類區(qū)別字段, 對每個子類特有的字段, 在父類內(nèi)中都存在。 這樣在父類的映射文件中, 設(shè)定Domanatrator屬性, 用來制定SUBCLASS的TYPE, 子類有SUBCLASS TARGET 對應(yīng)父類的DOMANATROTOR屬性, 并且制定自己的屬性。支持多態(tài)
缺點是不能保證數(shù)據(jù)完整性, 因為對每一個子類單獨的字段, 父類的表必須允許其值為空。
對父類和子類單獨見表, 用外鍵進(jìn)行關(guān)聯(lián): 用JOIN-SUBCLASS TARGET進(jìn)行外鍵關(guān)聯(lián), 并用KEY TARGET來指定關(guān)聯(lián)屬性。支持多態(tài), 但查詢用到外連接, 不易性能。
SUMMARY: 對關(guān)系數(shù)據(jù)完整性要求較高用第一種方法, 子類的獨立字段不是很多用第二種方法, 否則用第三種方法。