hibernate继承实用精华

继承的实现主要有三种:

1.subclass分层结构一第表,用Discriminator把一张表映射成多个类。
    分层结构一张表,也就是说,用一张表就可以搞定。
    hibernate提供一个Discriminator映射的方法,就是把一个表映射成不同的类,有不同的属性。
    
    子类继承父类,很多字段是可以继承过来的。那么我们在配置的时候,subclass只需要配置自己的属性即可,同时我们要为这个子类指定Discriminator标识,在表中表现为某一个flag标记字段。
    
    如下配置情况:
     <class name="Parent" table="ParentTab" discriminator-value="f">
       
        <id name="id" column="id">
            <generator class="native"/>
        </id>
        
        <discriminator column="flag" type="string"/>
        
        <property name="name" column="name"/>
        
        <subclass name="Boy" discriminator-value="b">
            <property name="inter" column="inter"/>
        </subclass>
         <subclass name="Girl" discriminator-value="g">
            <property name="girlN" column="girlN"/>
        </subclass>
        
    </class>
    
    上面的配置,使用我们的三个类,生成在一张表当中。表中用flag字段进行区分。当我们在查询的时候可以根据字段type来查询。也可以根据id来查询,但是这个id将是多态的,你在查询的时候并不确定是哪一个类。而多态的查
    询效率很低。所以不蓷荐使用这种方式!
 
 2.joined-subclass 每个子类对应一张表,不带辨别字段。
     子类表通过主键关联到超类表(因而关系模型实际上是一对一关联)
         
         <joined-subclass name="Boy" table="boys">
            <key column="boy_id" />
            <property name="inter" />
        </joined-subclass>

        <joined-subclass name="Girl" table="Girls">
            <key column="girl_id" />
            <property name="girlN" />
        </joined-subclass>
 
     每一个子类都产生了一张表,能过id字段关系到父表id,父表通过一对一的方式在查询的时候找到子表。 查询的时候可以采用多态查询。对于大数据而言,效率低。
     
 3.subclass与jion 每个子类一张表,带辩别字段
     它会在主表中多一个字段,这个字段用于标识这个记录是哪一个子类的。便于我们的查询,模型关系也是一对一。
     
         <discriminator column="flag" type="string"/>
        <property name="name"/>
        
        <subclass name="Boy" discriminator-value="b">
            <join table="boys">
                <key column="boy_id"/>
                <property name="inter"/>
            </join>
        </subclass>
        
        <subclass name="Girl" discriminator-value="g">
            <join table="girls">
                <key column="girl_id"/>
                <property name="girlN"/>
            </join>
        </subclass>
4.混合,分层结构和每个子类一张表。subclass和 subclass与jion一起使用
    
         <discriminator column="flag" type="string"/>
        <property name="name"/>
        
        <subclass name="Boy" discriminator-value="b">
            <property name="inter"/>
        </subclass>
        
        <subclass name="Girl" discriminator-value="g">
            <join table="girls">
                <key column="girl_id"/>
                <property name="girlN"/>
            </join>
        </subclass>
        
    采用混合使用时,其它就是把一些子类分成别外的一张表,而把一些子类和父类共用一张表。同样我们使用discriminator来进行区分。
    
    
5.union-subclass每个子类一张表
    这种方式的局限在于,如果一个属性在超类中做了映射,其字段名必须与所有子类表中定义的相同。
    超类是抽象类,请使用 abstract="true"6.使用隐式多态
    也就是说为每一个子类都配置一个class,且把父类的字段也配置在里面。
    这种方法的缺陷在于,在 Hibernate 执行多态查询时(polymorphic queries)无法生成带 UNION的 SQL 语句。
    
7.其它方式...如隐式多态的混合使用。
    
    最常用的方式是:subclass和subclass与jion的一起使用,也就是说如果子类字段较多,我们都使用subclass-jion如果子类字段较少我们就使用subclass和父类一第表。
    
    
    总结:继承在配置当中我们可以使用subclass joined-subclass subclass与join union-subclass 最常用的是subclass join与subclass的一个混合使用。 
    
    

hibernate继承实用精华,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。