在一些大數(shù)據(jù)量的應(yīng)用中,通常會(huì)將一些數(shù)據(jù)量大的表分成多個(gè)。最簡單的情況是設(shè)置一個(gè)實(shí)時(shí)表,用來保存最近一段時(shí)間的數(shù)據(jù),我們叫它recent_data;同時(shí)又有一個(gè)保存歷史數(shù)據(jù)的表,名叫history_data。當(dāng)然,也可以采用一段時(shí)間一個(gè)表的方式,如一個(gè)月一張表:data_200803。
recent_data保存最新的數(shù)據(jù),通常是為了提供預(yù)覽、監(jiān)視等對顯示速度要求高的功能,使用者此時(shí)往往是想要一個(gè)數(shù)據(jù)的大概印象,因此響應(yīng)速度十分重要;而history_data則面向詳細(xì)查詢,這時(shí)使用者關(guān)注的數(shù)據(jù),因此,慢是可以接受的。
介紹背景介紹得有點(diǎn)跑題了,還是回來說說正題。面對recent_data和history_data這兩張表要使用hibernate進(jìn)行封裝時(shí),該怎么解決呢?
這里有三個(gè)方法。
1. 使用古老而笨拙的方法——為每個(gè)table建立一個(gè)class,如RecentData和HistoryData。然后在上層程序中使用這兩個(gè)類。
優(yōu)點(diǎn):簡單,方便,快捷,還不費(fèi)腦子!(僅對負(fù)責(zé)Hibernate封裝的人來說……)
缺點(diǎn):上層使用極其復(fù)雜,明明就是同一個(gè)東西,偏偏弄成兩個(gè)對象,要寫兩套實(shí)現(xiàn)……&@&*¥#%
2. 建立一個(gè)基類Data,然后派生出RecentData和HistoryData,分別映射兩個(gè)表。派生出的兩個(gè)類不用寫什么東西,僅僅是extends了Data就行了。對外一致以基類Data出現(xiàn),這樣上層使用時(shí),就可以統(tǒng)一用Data類了。此法為第一種方法的改進(jìn)版,也是我偏愛的解決方法。
優(yōu)點(diǎn):Hibernate映射簡單,上層使用也簡單
缺點(diǎn):多了兩個(gè)類,盡管里面啥也沒有
3. 使用Hibernate3新增加的entity-name特性,用一個(gè)類來映射多個(gè)table。這里有一個(gè)詳細(xì)的例子
(http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3150)。
優(yōu)點(diǎn):不用定義那么多類,映射也挺簡單
缺點(diǎn):Hibernate3才有此功能(如果你還在用之前的版本的話……)
-- EOF --