当Hibernate遭遇多个结构相同的表

Posted on 2008-03-19 23:58 Norvid 阅读(1739) 评论(0)  编辑  收藏 所属分类: 点点滴滴
在一些大数据量的应用中,通常会将一些数据量大的表分成多个。最简单的情况是设置一个实时表,用来保存最近一段时间的数据,我们叫它recent_data;同时又有一个保存历史数据的表,名叫history_data。当然,也可以采用一段时间一个表的方式,如一个月一张表:data_200803。

recent_data保存最新的数据,通常是为了提供预览、监视等对显示速度要求高的功能,使用者此时往往是想要一个数据的大概印象,因此响应速度十分重要;而history_data则面向详细查询,这时使用者关注的数据,因此,慢是可以接受的。

介绍背景介绍得有点跑题了,还是回来说说正题。面对recent_data和history_data这两张表要使用hibernate进行封装时,该怎么解决呢?

这里有三个方法。

1. 使用古老而笨拙的方法——为每个table建立一个class,如RecentData和HistoryData。然后在上层程序中使用这两个类。
优点:简单,方便,快捷,还不费脑子!(仅对负责Hibernate封装的人来说……)
缺点:上层使用极其复杂,明明就是同一个东西,偏偏弄成两个对象,要写两套实现……&@&*¥#%

2. 建立一个基类Data,然后派生出RecentData和HistoryData,分别映射两个表。派生出的两个类不用写什么东西,仅仅是extends了Data就行了。对外一致以基类Data出现,这样上层使用时,就可以统一用Data类了。此法为第一种方法的改进版,也是我偏爱的解决方法。
优点:Hibernate映射简单,上层使用也简单
缺点:多了两个类,尽管里面啥也没有

3. 使用Hibernate3新增加的entity-name特性,用一个类来映射多个table。这里有一个详细的例子(http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3150)
优点:不用定义那么多类,映射也挺简单
缺点:Hibernate3才有此功能(如果你还在用之前的版本的话……)

-- EOF --



只有注册用户登录后才能发表评论。


网站导航:
 

posts - 0, comments - 9, trackbacks - 0, articles - 13

Copyright © Norvid