本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7593912
建立时间:2006年5月29日




[Hibernate]Hibernate之多次映射同一个类
软件技术

lhwork 发表于 2007/1/19 9:45:52

假设一个博客系统中有一个表用来存储所有的文章,这个表中用一个大文本字段来存储文章的内容。当我们在显示其中一篇文章时,我们需要加载该文章的每一个字段的值。但是另外一种情况,我们仅仅需要列出最新发表的十篇文章,而且仅仅是为了在页面上显示其标题和链接的时候,我们就不希望程序去读取存储文章内容的字段,为什么呢?你不妨做一个测试,同样一个查询,读取大文本字段和不读取大文本字段的性能可能差别是三倍以上。因此为了提升应用性能,我们在显示最新文章列表的时候不想去读取文章的内容字段。但是Hibernate的做法不管你要不要都会把所有的字段读出并映射到bean类相对应的属性中。 我之前有一篇文章在介绍这个解决办法的时候采取的是添加另外一个类,然后在bean的配置文件中把文章内容的字段删掉,这样当我要显示不包含内容的文章列表,我的查询就可以直接针对新增的这个类,我们姑且称这种方法为方法一。 其实还有另外一种做法,那就是利用Hibernate的多次映射同一个类的方法,我们称为方法二。 这个方法与我之前的方法比较不同的在于没有必要再新增另外的类,也就是说对同一个类,可以配置多次,那么Hibernate是通过什么来识别是不同的映射关系呢?先请看下面的配置:  <class name="BulletinBean" table="dlog_bulletin" entity-name="BulletinBean">        <id name="id" column="bulletin_id" type="int">   <generator class="identity"/>  </id>    <property name="type"  type="int" column="bulletin_type"/>  <property name="status"  type="int" column="status"/>  <property name="title" type="string"/>  <property name="content" type="string"/>    <property name="pubTime" type="timestamp" column="pub_time" update="false"/>  <many-to-one name="site" column="site_id" cascade="none" update="false"/> </class>  <class name="BulletinBean" table="dlog_bulletin" entity-name="BulletinOutlineBean">        <id name="id" column="bulletin_id" type="int">   <generator class="identity"/>  </id>    <property name="type"  type="int" column="bulletin_type"/>  <property name="status"  type="int" column="status"/>  <property name="title" type="string"/>  <!--  <property name="content" type="string"/>  -->  <property name="pubTime" type="timestamp" column="pub_time" update="false"/>  <many-to-one name="site" column="site_id" cascade="none" update="false"/> </class> 每个class节点都增加了一个entity-name的配置,用来提供给Hibernate识别一个对象,如果没有指定这个值,那么Hibernate默认的让它与class的值相同。有了上面则个配置,当我们需要带内容的查询就可以使用BulletinBean,而不需要内容的查询就使用BulletinOutlineBean。 与方法一比较,方法二优点显而易见,它使系统中的bean类更加清晰、统一、一目了然,但也有不足之处,就是你不能使用Criteria来执行对BulletinOutlineBean的查询。但是最最要命的是通过我的实验表明,一旦你想向表中插入一条记录,你会得到一个异常:没有该类的映射配置!我想这可能是Hibernate考虑不足的地方。 参考文章《关于类继承在Hibernate的问题》


阅读全文(2238) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.244 second(s), page refreshed 144772142 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号