hbn 继承关系映射_1

尝试着继承关系和xdoclet使用后,对数据库面向对象的使用更近一步。
这次例子从开始到结束,都没有接触面向结构的数据库设计;
并完全在代码中以面向对象的形式来设计的。


hbn 的继承映射关系有这几种;
  1. 继承关系类共同使用一个表;
  2. 每个子类一个表(mapping全);
  3. 每个具体内一个表(mapping只有父类)。
先说说3把,感觉这点最好用-》》
继承关系描述:
  Animals父类 -- Bird 、Reptiles;
  Animals.java
package  TableBean;

/** 动物父类
 * @hibernate.class 
 * table="animals"
 
*/
public   class  Animals {

    
private  Integer id ;
    
private  Integer size ;
    
private  Integer speed;
    
/**
     * @hibernate.id
     * generator-class="increment"
     
*/
    
public  Integer getId() {
        
return  id;
    }

    
public   void  setId(Integer id) {
        
this .id  =  id;
    }

    
/** 动物体积大小
     * @hibernate.property
     
*/
    
public  Integer getSize() {
        
return  size;
    }

    
public   void  setSize(Integer size) {
        
this .size  =  size;
    }
    
/** 动物的移动速度
     * @hibernate.property
     
*/
    
public  Integer getSpeed() {
        
return  speed;
    }

    
public   void  setSpeed(Integer speed) {
        
this .speed  =  speed;
    }
    
}

Bird.java
package  TableBean;

/** 在xdoeclt中声明继承表关系
 * @hibernate.joined-subclass 
 * @hibernate.joined-subclass-key 
 *  column="id"
 * 
 
*/
public   class  Bird  extends  Animals {
    
private  String wings ;
    
private  Integer leg ;
    
/** 鸟类翅膀描述
     * @hibernate.property 
     * 
@return
     
*/
    
public  String getWings() {
        
return  wings;
    }

    
public   void  setWings(String wings) {
        
this .wings  =  wings;
    }

    
/**鸟腿描述
     * @hibernate.property 
     * 
@return
     
*/
    
public  Integer getLeg() {
        
return  leg;
    }

    
public   void  setLeg(Integer leg) {
        
this .leg  =  leg;
    }
    
}
 
Reptiles.java
package  TableBean;

/** 在xdoeclt中声明继承表关系
 * @hibernate.joined-subclass 
 * @hibernate.joined-subclass-key 
 *  column="id"
 
*/
public   class  Reptiles  extends  Animals {
    
private  Integer leg ;
    
/** 爬行动物腿个数
     * @hibernate.property 
     * 
@return
     
*/
    
public  Integer getLeg() {
        
return  leg;
    }

    
public   void  setLeg(Integer leg) {
        
this .leg  =  leg;
    }
    
}


ant_xdoeclt.xml文件
<? xml version="1.0" encoding="UTF-8" ?>

<!--  DO NOT EDIT  -->
<!--  This file is automatically regenerated for each new XDoclet generation.  -->
<!--  Any changes you make to this file will be overwritten. If you want  -->
<!--  to edit this file, make a copy and rename it for your own use.  -->

< project  name ="Hbmzj XDoclet Generation"  default ="_xdoclet_generation_" >< property  file ="xdoclet-build.properties" />
< property  name ="xdoclet.basedir"  value ="/C:/Program Files/MyEclipse/eclipse/plugins/com.genuitec.jboss.ide.eclipse.xdoclet.core_4.0.0/" />
< path  id ="xdoclet.classpath" >< pathelement  location ="E:/hibernate/Hbmzj/bin" />
< pathelement  location ="C:/Program Files/Java/jdk1.5.0_02/jre/lib/rt.jar" />
< pathelement  location ="C:/Program Files/Java/jdk1.5.0_02/jre/lib/jsse.jar" />
< pathelement  location ="C:/Program Files/Java/jdk1.5.0_02/jre/lib/jce.jar" />
< pathelement  location ="C:/Program Files/Java/jdk1.5.0_02/jre/lib/charsets.jar" />
< pathelement  location ="C:/Program Files/Java/jdk1.5.0_02/jre/lib/ext/sunjce_provider.jar" />
< pathelement  location ="C:/Program Files/Java/jdk1.5.0_02/jre/lib/ext/sunpkcs11.jar" />
< pathelement  location ="C:/Program Files/Java/jdk1.5.0_02/jre/lib/ext/dnsns.jar" />
< pathelement  location ="C:/Program Files/Java/jdk1.5.0_02/jre/lib/ext/localedata.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/antlr-2.7.5H3.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/asm-attrs.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/asm.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/c3p0-0.8.5.2.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/cglib-2.1.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/cleanimports.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/commons-collections-2.1.1.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/commons-logging-1.0.4.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/concurrent-1.3.2.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/connector.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/dom4j-1.6.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/ehcache-1.1.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/hibernate3.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/jaas.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/jacc-1_0-fr.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/jaxen-1.1-beta-4.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/jdbc2_0-stdext.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/jgroups-2.2.7.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/jta.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/log4j-1.2.9.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/oscache-2.1.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/proxool-0.8.3.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/swarmcache-1.0rc2.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/xerces-2.6.2.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/xml-apis.jar" />
< pathelement  location ="D:/eclipse2/eclipse/plugins/org.junit_3.8.1/junit.jar" />
< pathelement  location ="E:/hibernate/Hbmzj/lib/MYSQL.JAR" />

< fileset  dir ="${xdoclet.basedir}" >
< include  name ="*.jar" />
< exclude  name ="*xjavadoc*.jar" />
< include  name ="jdk5/*.jar" />
</ fileset >
</ path >
< target  name ="_xdoclet_generation_"  depends ="N65540" />
< target  name ="N65540"  description ="Standard Hibernate" >
< taskdef  name ="hibernatedoclet"
         classname
="xdoclet.modules.hibernate.HibernateDocletTask"
         classpathref
="xdoclet.classpath" />

<
hibernatedoclet  excludedTags ="@version,@author,@todo,@see"  
               destDir
="src"  
addedTags
="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}"   >

< fileset  dir ="src"   includes ="**/*.java"   >
</ fileset >

< hibernate >
</ hibernate >
</ hibernatedoclet >
</
target >
</
project >

ant运行 后得到 Animals.hbm.xml 文件
使用 hbn工具 hbn2ddl 后
mysql >   desc   Animals;
+ -- -----+---------+------+-----+---------+-------+
|  Field  |  Type     |   Null   |   Key   |   Default   |  Extra  |
+ -- -----+---------+------+-----+---------+-------+
|  id     |   int ( 11 |        |  PRI  |   0         |         |
|  size   |   int ( 11 |  YES   |       |   NULL      |         |
|  speed  |   int ( 11 |  YES   |       |   NULL      |         |
+ -- -----+---------+------+-----+---------+-------+
3  rows  in   set  ( 0.00  sec)

mysql
>   desc  reptiles;
+ -- -----+---------+------+-----+---------+-------+
|  Field  |  Type     |   Null   |   Key   |   Default   |  Extra  |
+ -- -----+---------+------+-----+---------+-------+
|  id     |   int ( 11 |        |  PRI  |   0         |         |
|  leg    |   int ( 11 |  YES   |       |   NULL      |         |
+ -- -----+---------+------+-----+---------+-------+
2  rows  in   set  ( 0.00  sec)

mysql
>   desc  bird;
+ -- -----+--------------+------+-----+---------+-------+
|  Field  |  Type          |   Null   |   Key   |   Default   |  Extra  |
+ -- -----+--------------+------+-----+---------+-------+
|  id     |   int ( 11 )       |        |  PRI  |   0         |         |
|  wings  |   varchar ( 255 |  YES   |       |   NULL      |         |
|  leg    |   int ( 11 )       |  YES   |       |   NULL      |         |
+ -- -----+--------------+------+-----+---------+-------+
3  rows  in   set  ( 0.00  sec)


添加测试数据:
mysql >   select   *   from  bird;
+ -- --+-------+------+
|  id  |  wings  |  leg   |
+ -- --+-------+------+
|    1   |  2G     |      2   |
+ -- --+-------+------+
1  row  in   set  ( 0.00  sec)

mysql
>   select   *   from  Animals;
+ -- --+------+-------+
|  id  |  size  |  speed  |
+ -- --+------+-------+
|    1   |      1   |       9   |
|    2   |      6   |       2   |
+ -- --+------+-------+
2  rows  in   set  ( 0.00  sec)

mysql
>   select   *   from  Reptiles;
+ -- --+------+
|  id  |  leg   |
+ -- --+------+
|    2   |      4   |
+ -- --+------+
1  row  in   set  ( 0.00  sec)



测试
public   class  TestJc  extends  TestCase {
    
public   void  testJC()  throws  Exception {
        Session session
=  HbnFactory.currentSession();
        Transaction tr 
=  session.beginTransaction();
        //1
        Animals aa 
=  (Animals)session.load(Animals. class , 1 );
        System.out.println(aa);
        //2
        Bird bb 
=   (Bird) session.load(Bird. class , 1 );
        System.out.println(bb);
        //3
        Object obj 
=  session.createQuery( "  from Animals  " ).list();
        System.out.println(obj);
        
        tr.commit();
        HbnFactory.closeSession();
    }
}
结果:
//1
Hibernate: 
select  animals0_.id  as  id0_, animals0_.size  as  size0_0_, animals0_.speed  as  speed0_0_, animals0_1_.wings  as  wings1_0_, animals0_1_.leg  as  leg1_0_, animals0_2_.leg  as  leg2_0_,  case   when  animals0_1_.id  is   not   null   then   1   when  animals0_2_.id  is   not   null   then   2   when  animals0_.id  is   not   null   then   0   end   as  clazz_0_  from  animals animals0_  left   outer   join  Bird animals0_1_  on  animals0_.id = animals0_1_.id  left   outer   join  Reptiles animals0_2_  on  animals0_.id = animals0_2_.id  where  animals0_.id = ?
TableBean.Bird
@5e176f
//2
TableBean.Bird
@5e176f
//3
Hibernate: 
select  animals0_.id  as  id, animals0_.size  as  size0_, animals0_.speed  as  speed0_, animals0_1_.wings  as  wings1_, animals0_1_.leg  as  leg1_, animals0_2_.leg  as  leg2_,  case   when  animals0_1_.id  is   not   null   then   1   when  animals0_2_.id  is   not   null   then   2   when  animals0_.id  is   not   null   then   0   end   as  clazz_  from  animals animals0_  left   outer   join  Bird animals0_1_  on  animals0_.id = animals0_1_.id  left   outer   join  Reptiles animals0_2_  on  animals0_.id = animals0_2_.id
[ TableBean.Bird@5e176f, TableBean.Reptiles@2c1e6b, TableBean.Reptiles@811c88 ]



你可能感兴趣的:(hbn 继承关系映射_1)