小程人生

          統計

          留言簿(2)

          閱讀排行榜

          評論排行榜

          hibernate繼承實現

          hiberate繼承分為三種方式:一個表對應所有繼承的類,具體類對應一個表,一個類對應一個表(父類及子類)

          一個類對應一個表(父類及子類)
          數據庫腳本
          CREATE TABLE `t_item1` (                                  
                     `id` int(11) NOT NULL AUTO_INCREMENT,                   
                     `manufacture` varchar(20) DEFAULT NULL,                 
                     `name` varchar(20) DEFAULT NULL,                        
                     PRIMARY KEY (`id`)                                      
                   ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC 

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

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

          類代碼

          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>
          具體類對應一個表
          數據庫腳本
           CREATE TABLE `t_book2` (                                 
                     `id` int(11) NOT NULL AUTO_INCREMENT,                  
                     `name` varchar(20) DEFAULT NULL,                       
                     `manufacture` varchar(20) DEFAULT NULL,                
                     `pagecount` int(11) DEFAULT NULL,                      
                     PRIMARY KEY (`id`)                                     
                   ) ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=latin1
           CREATE TABLE `t_dvd2` (                                  
                    `id` int(11) NOT NULL AUTO_INCREMENT,                  
                    `name` varchar(23) DEFAULT NULL,                       
                    `manufacture` varchar(20) DEFAULT NULL,                
                    `regioncode` varchar(20) DEFAULT NULL,                 
                    PRIMARY KEY (`id`)                                     
                  ) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=latin1 
          類代碼

          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>

          一個表對應所有繼承的類
          數據庫腳本
          CREATE TABLE `t_item3` (                                
                     `id` int(11) NOT NULL AUTO_INCREMENT,                 
                     `name` varchar(20) DEFAULT NULL,                      
                     `manufacture` varchar(20) DEFAULT NULL,               
                     `pagecount` int(11) DEFAULT NULL,                     
                     `regioncode` varchar(20) DEFAULT NULL,                
                     `category` varchar(11) DEFAULT NULL,                  
                     PRIMARY KEY (`id`)                                    
                   ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 
          類代碼

          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>
          三種方式的優缺點
          每個類對應一個表
          缺點:創建表過多,查詢需用求外連接,優點:某個表字段發生變化只需修改相對表,支持多態查詢,符合關系型數據庫設計
          具體類對應一個表
          缺點:數據表包含重復字段,如果父類發生變化子類也要變化,查詢父類時要查詢所有子類,不支持多態查詢,優點:符合關系型數據庫設計
          一個表對應所有類
          缺點:表中引入區分子類的字段,子類的字段不能創建為空,優點:只需一張表,有很好的查詢性能,只要修改一張表,支持多態查詢

          posted on 2008-07-11 10:28 小程人生 閱讀(5609) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 康乐县| 怀来县| 西宁市| 全南县| 鹤岗市| 英吉沙县| 绵竹市| 合肥市| 南丰县| 措勤县| 巴里| 泰安市| 江达县| 彝良县| 华阴市| 海丰县| 色达县| 于都县| 呼伦贝尔市| 惠来县| 双鸭山市| 柞水县| 确山县| 高平市| 昭苏县| 兴国县| 金塔县| 宜兴市| 玉门市| 本溪市| 桂林市| 宾川县| 扎兰屯市| 新津县| 阿勒泰市| 长治县| 栖霞市| 如皋市| 黑山县| 娱乐| 柯坪县|