常言笑的家

          Spring, Hibernate, Struts, Ajax, RoR

          hibernate繼承實(shí)現(xiàn)

          hiberate繼承分為三種方式:一個(gè)表對(duì)應(yīng)所有繼承的類(lèi),具體類(lèi)對(duì)應(yīng)一個(gè)表,一個(gè)類(lèi)對(duì)應(yīng)一個(gè)表(父類(lèi)及子類(lèi))

          一個(gè)類(lèi)對(duì)應(yīng)一個(gè)表(父類(lèi)及子類(lèi))
          數(shù)據(jù)庫(kù)腳本

          CREATE TABLE `t_item1` (                                   
                     `id` 
          int(11NOT NULL AUTO_INCREMENT,                    
                     `manufacture` 
          varchar(20DEFAULT NULL,                  
                     `name` 
          varchar(20DEFAULT NULL,                         
                     
          PRIMARY KEY (`id`)                                       
                   ) ENGINE
          =InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC  

          CREATE TABLE `t_book1` (                                                                  
                     `id` 
          int(11NOT NULL AUTO_INCREMENT,                                                   
                     `name` 
          varchar(20DEFAULT NULL,                                                        
                     `manufacture` 
          varchar(20DEFAULT NULL,                                                 
                     `pagecount` 
          int(11DEFAULT NULL,                                                       
                     
          PRIMARY KEY (`id`)                                                                      
                   ) ENGINE
          =InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC COMMENT='InnoDB free: 3072 kB'  

          CREATE TABLE `t_dvd1` (                                    
                    `id` 
          int(11NOT NULL AUTO_INCREMENT,                    
                    `name` 
          varchar(20DEFAULT NULL,                         
                    `manufacture` 
          varchar(20DEFAULT NULL,                  
                    `regioncode` 
          varchar(20DEFAULT NULL,                   
                    
          PRIMARY KEY (`id`)                                       
                  ) ENGINE
          =InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC  
          類(lèi)代碼
          public class TItem1 implements Serializable {
           
          private int id;
           
          private String name;
           
          private String manufacture;

           
          public int getId() {
            
          return id;
           }


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


           
          public String getName() {
            
          return name;
           }


           
          public void setName(String name) {
            
          this.name = name;
           }


           
          public String getManufacture() {
            
          return manufacture;
           }


           
          public void setManufacture(String manufacture) {
            
          this.manufacture = manufacture;
           }


          }



          public class TBook1 extends TItem1 implements Serializable {
           
          private int pagecount;

           
          public int getPagecount() {
            
          return pagecount;
           }


           
          public void setPagecount(int pagecount) {
            
          this.pagecount = pagecount;
           }


          }


          public class TDvd1 extends TItem1 implements Serializable {
          private String regioncode;

          public String getRegioncode() {
           
          return regioncode;
          }


          public void setRegioncode(String regioncode) {
           
          this.regioncode = regioncode;
          }


          }

          配置文件
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
           "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
          >
          <hibernate-mapping>
          <class name="mypackage.TItem1" table="t_item1">
           
          <id name="id" column="id">
            
          <generator class="identity"/>
           
          </id>
           
          <property name="name" column="name"/>
           
          <property name="manufacture" column="manufacture"/>
           
          <joined-subclass name="mypackage.TBook1" table="t_book1">
            
          <key column="id"/>
            
          <property name="pagecount" column="pagecount" type="java.lang.Integer"/>
           
          </joined-subclass>
           
          <joined-subclass name="mypackage.TDvd1" table="t_dvd1">
            
          <key column="id"/>
            
          <property name="regioncode" column="regioncode" type="java.lang.String"/>
           
          </joined-subclass>
          </class>
           
          </hibernate-mapping>
          具體類(lèi)對(duì)應(yīng)一個(gè)表
          數(shù)據(jù)庫(kù)腳本
           CREATE TABLE `t_book2` (                                  
                     `id` 
          int(11NOT NULL AUTO_INCREMENT,                   
                     `name` 
          varchar(20DEFAULT NULL,                        
                     `manufacture` 
          varchar(20DEFAULT NULL,                 
                     `pagecount` 
          int(11DEFAULT NULL,                       
                     
          PRIMARY KEY (`id`)                                      
                   ) ENGINE
          =MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=latin1 
           
          CREATE TABLE `t_dvd2` (                                   
                    `id` 
          int(11NOT NULL AUTO_INCREMENT,                   
                    `name` 
          varchar(23DEFAULT NULL,                        
                    `manufacture` 
          varchar(20DEFAULT NULL,                 
                    `regioncode` 
          varchar(20DEFAULT NULL,                  
                    
          PRIMARY KEY (`id`)                                      
                  ) ENGINE
          =MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=latin1  
          類(lèi)代碼
          public abstract class TItem2 implements java.io.Serializable {
           
          private int id;
           
          private String name;
           
          private String manufacture;

           
          public int getId() {
            
          return id;
           }


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


           
          public String getName() {
            
          return name;
           }


           
          public void setName(String name) {
            
          this.name = name;
           }


           
          public String getManufacture() {
            
          return manufacture;
           }


           
          public void setManufacture(String manufacture) {
            
          this.manufacture = manufacture;
           }


          }



          public class TDvd2 extends TItem2 implements Serializable {
           
          private String regioncode;

           
          public String getRegioncode() {
            
          return regioncode;
           }


           
          public void setRegioncode(String regioncode) {
            
          this.regioncode = regioncode;
           }


          }


          public class TBook2 extends TItem2 implements Serializable {
           
          private int pagecount;

           
          public int getPagecount() {
            
          return pagecount;
           }


           
          public void setPagecount(int pagecount) {
            
          this.pagecount = pagecount;
           }


          }

          配置文件
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
           "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
          >
          <hibernate-mapping>
           
          <class name="mypackage.TDvd2" table="t_dvd2">
            
          <id name="id" column="id">
             
          <generator class="identity"/>
            
          </id>
            
          <property name="name" column="name"/>
            
          <property name="manufacture" column="manufacture"/>
            
          <property name="regioncode" column="regioncode"/>
           
          </class>
           
          <class name="mypackage.TBook2" table="t_book2">
            
          <id name="id" column="id">
             
          <generator class="identity"/>
            
          </id>
            
          <property name="name" column="name"/>
            
          <property name="manufacture" column="manufacture"/>
            
          <property name="pagecount" column="pagecount"/>
           
          </class>
          </hibernate-mapping>
          一個(gè)表對(duì)應(yīng)所有繼承的類(lèi)
          數(shù)據(jù)庫(kù)腳本
          CREATE TABLE `t_item3` (                                 
                     `id` 
          int(11NOT NULL AUTO_INCREMENT,                  
                     `name` 
          varchar(20DEFAULT NULL,                       
                     `manufacture` 
          varchar(20DEFAULT NULL,                
                     `pagecount` 
          int(11DEFAULT NULL,                      
                     `regioncode` 
          varchar(20DEFAULT NULL,                 
                     `category` 
          varchar(11DEFAULT NULL,                   
                     
          PRIMARY KEY (`id`)                                     
                   ) ENGINE
          =MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1  
          類(lèi)代碼
          public class TItem3 implements Serializable {
           
          private int id;
           
          private String name;
           
          private String manufacture;
           
          private String category;

           
          public int getId() {
            
          return id;
           }


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


           
          public String getName() {
            
          return name;
           }


           
          public void setName(String name) {
            
          this.name = name;
           }


           
          public String getManufacture() {
            
          return manufacture;
           }


           
          public void setManufacture(String manufacture) {
            
          this.manufacture = manufacture;
           }


           
          public String getCategory() {
            
          return category;
           }


           
          public void setCategory(String category) {
            
          this.category = category;
           }


          }



          public class TDvd3 extends TItem3 implements Serializable {
           
          private String regioncode;

           
          public String getRegioncode() {
            
          return regioncode;
           }


           
          public void setRegioncode(String regioncode) {
            
          this.regioncode = regioncode;
           }


          }


          public class TBook3 extends TItem3 implements Serializable {
           
          private int pagecount;

           
          public int getPagecount() {
            
          return pagecount;
           }


           
          public void setPagecount(int pagecount) {
            
          this.pagecount = pagecount;
           }


          }

          配置文件
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
           "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
          >
          <hibernate-mapping>
          <class name="mypackage.TItem3" table="t_item3">
           
          <id name="id" column="id">
            
          <generator class="identity"/>
           
          </id>
           
          <discriminator column="category" type="java.lang.String"/>
           
          <property name="name" column="name"/>
           
          <property name="manufacture" column="manufacture"/>
           
          <subclass name="mypackage.TDvd3" discriminator-value="1">
            
          <property name="regioncode" column="regioncode"/>
           
          </subclass>
           
          <subclass name="mypackage.TBook3" discriminator-value="0">
            
          <property name="pagecount" column="pagecount"/>
           
          </subclass>
          </class>
          </hibernate-mapping>
          三種方式的優(yōu)缺點(diǎn)
          每個(gè)類(lèi)對(duì)應(yīng)一個(gè)表
          缺點(diǎn):創(chuàng)建表過(guò)多,查詢(xún)需用求外連接,優(yōu)點(diǎn):某個(gè)表字段發(fā)生變化只需修改相對(duì)表,支持多態(tài)查詢(xún),符合關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)
          具體類(lèi)對(duì)應(yīng)一個(gè)表
          缺點(diǎn):數(shù)據(jù)表包含重復(fù)字段,如果父類(lèi)發(fā)生變化子類(lèi)也要變化,查詢(xún)父類(lèi)時(shí)要查詢(xún)所有子類(lèi),不支持多態(tài)查詢(xún),優(yōu)點(diǎn):符合關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)
          一個(gè)表對(duì)應(yīng)所有類(lèi)
          缺點(diǎn):表中引入?yún)^(qū)分子類(lèi)的字段,子類(lèi)的字段不能創(chuàng)建為空,優(yōu)點(diǎn):只需一張表,有很好的查詢(xún)性能,只要修改一張表,支持多態(tài)查詢(xún)

          posted on 2010-10-08 23:25 常言笑 閱讀(236) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 技術(shù)總結(jié)

          My Links

          Blog Stats

          常用鏈接

          留言簿(5)

          隨筆分類(lèi)

          隨筆檔案

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 扎兰屯市| 沙洋县| 岑溪市| 故城县| 庆阳市| 郎溪县| 武功县| 永昌县| 师宗县| 乐山市| 邵阳县| 宿州市| 武功县| 乌海市| 龙陵县| 塘沽区| 宁都县| 都匀市| 葫芦岛市| 龙州县| 马龙县| 两当县| 行唐县| 汕头市| 米泉市| 抚宁县| 阿拉善右旗| 屯门区| 出国| 吐鲁番市| 灯塔市| 普兰店市| 合水县| 綦江县| 宁都县| 弥渡县| 木兰县| 石林| 余庆县| 永丰县| 蒲城县|