鱼肠剑

龙游浅水遭虾戏,虎落平阳被犬欺,落坡凤凰不如鸡,有朝一日龙得水,我让长江水倒流,有朝一日虎归山,我要血染半边天,有朝一日凤翔天,我叫天下尽我鸣。

用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
wfnlibo的公告
<script type="text/javascript"><!-- google_ad_client = "pub-0093243309179786"; google_ad_width = 180; google_ad_height = 150; google_ad_format = "180x150_as"; google_ad_type = "text_image"; google_ad_channel = ""; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <script type="text/javascript"><!-- google_ad_client = "pub-0093243309179786"; google_ad_width = 180; google_ad_height = 150; google_ad_format = "180x150_as"; google_ad_type = "text_image"; google_ad_channel = ""; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <script type="text/javascript"><!-- google_ad_client = "pub-0093243309179786"; google_ad_width = 110; google_ad_height = 32; google_ad_format = "110x32_as_rimg"; google_cpa_choice = "CAAQ4eKfnAIaCPynyMZmLHSTKOWkwXU"; google_ad_channel = ""; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
文章分类
API
Dom4j
HibernateAPI
J2SDK 1.4.2API
J2SDK 1.5API
J2SE API 中文版
JBoss API
JDOM API
jetspeed2 API
jfreechart API
jfreereport API
jxpath API
Struts API
Eclipse
Eclipse Plugins
EclipseForms
Eclipse-plugins
EclipseZone
Eclipse中国社区
Eclipse官方网站
MYEclipse
中国ECLIPSE社区
Portal
Jetspeed_apache
liferay
ofbiz
常去的JAVA类网站
Ant 官方网站
Hibernate中文站
Hibernate官方
http://www.javascud.org/
IBM developerWorks 中国
ITPUB
javafan
JAVA开源大全
JAVA开源大全
Lomboz
Matrix-与Java共舞
Poseidon for UML
Tapestry中文文档
Tomcat 官方网站
中文JAVA技术网
其他BLOG
http://blogzb.bokee.com/
Martin Fowler 中文BLOG
steady blog
悠悠人生
其它
ajax
JSEclispe
Laszlo 开发专区
selenium-ide
xmlBuild
Xpath学习文档
企业开源社区
日历
存档

原创  Hibernate的Discriminator应用 收藏

可能经常遇到这样的情况:
       在数据库表中会有这样的一个字段用来区别记录的属性,如:在客户表中有一个字段表示客户级别,当这个记录为A时是一级客户,为B时是二级客户。在用hiberante做OR表示时类可能是这样的:
       public class Customer{
          private String flag;   //表示客户的级别
          ...
       }   
       然后,在程序中手动控制flag的值,但是这样当每个级的客户有不同的属性时Customer类将包含所有级别的属性,这样不是很好。
       hibernate提供一个Discriminator映射的方法,就是把一个表映射成不同的类,有不同的属性。

       public class Customer{
          //包含所有级别的公共属性
          ...
        }
      
       public class CustomerA extends Customer{
       //只包括一级客户的特有属性
        }

       public class CustomerB extends Customer{
       //只包含二级客户特有的属性
        }
这样更符合面向对象的原则,然后在hbm.xml中这样写:
<id name="id" type="int">
    ...
</id>
<discriminator column="flag" type="string" />
<!-- 公共属性的映射 -->
<subclass name="CustomerA" discriminator-value="A">
<!-- 一级客户特有属性的映射 -->
</subclass>
<subclass name="CustomerB" discriminator-value="B">
<!-- 二级客户特有属性的映射 -->
</subclass>

这样就可以单独的用CustomerA,CustomerB这样的实例了,做数据库修改时就不用关心flag字段的值了,会自动的加A或B。

如果是使用hibernate Annotation而不是xml来描述映谢关系,代码如下:
@Entity
@Table(name = "customer")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "flag", discriminatorType = DiscriminatorType.STRING)
public class Customer{
}

@Entity
@DiscriminatorValue(value = "A")
public class CustomerA extends Customer{
}

@Entity
@DiscriminatorValue(value = "B")
public class CustomerB extends Customer{
}

这样就可以了。 

发表于 @ 2007年03月07日 10:59:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:maven2中执行Ant任务

  • 发表评论
  • 评论内容:
  •  
Copyright © wfnlibo
Powered by CSDN Blog