小程人生

          統(tǒng)計

          留言簿(2)

          閱讀排行榜

          評論排行榜

          hibernate繼承實現(xiàn)

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

          一個類對應(yīng)一個表(父類及子類)
          數(shù)據(jù)庫腳本
          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>
          具體類對應(yīng)一個表
          數(shù)據(jù)庫腳本
           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>

          一個表對應(yīng)所有繼承的類
          數(shù)據(jù)庫腳本
          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>
          三種方式的優(yōu)缺點
          每個類對應(yīng)一個表
          缺點:創(chuàng)建表過多,查詢需用求外連接,優(yōu)點:某個表字段發(fā)生變化只需修改相對表,支持多態(tài)查詢,符合關(guān)系型數(shù)據(jù)庫設(shè)計
          具體類對應(yīng)一個表
          缺點:數(shù)據(jù)表包含重復(fù)字段,如果父類發(fā)生變化子類也要變化,查詢父類時要查詢所有子類,不支持多態(tài)查詢,優(yōu)點:符合關(guān)系型數(shù)據(jù)庫設(shè)計
          一個表對應(yīng)所有類
          缺點:表中引入?yún)^(qū)分子類的字段,子類的字段不能創(chuàng)建為空,優(yōu)點:只需一張表,有很好的查詢性能,只要修改一張表,支持多態(tài)查詢

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 彰化县| 伊川县| 海宁市| 柯坪县| 措美县| 调兵山市| 屏山县| 武川县| 阿克苏市| 灵丘县| 繁昌县| 呈贡县| 始兴县| 且末县| 寿光市| 沙河市| 彭州市| 浦城县| 西华县| 鞍山市| 徐汇区| 全南县| 景洪市| 志丹县| 绵竹市| 含山县| 仙桃市| 东兴市| 黎川县| 游戏| 丁青县| 谷城县| 绥中县| 泾源县| 宁阳县| 班戈县| 仲巴县| 辛集市| 新田县| 开远市| 阳城县|