想飛就別怕摔

          大爺的并TM罵人

          Hibernate學習(九)---【繼承關系】

          繼承關系分為三種:一張表對應一整棵類繼承樹、一個類對應一張表、每一個具體類對應一張表。
          三個java類Person、Student、Teacher,Student和Teacher繼承Person類并且Student和Teacher沒有任何關系
          代碼如下:
          Person.java
          package com.zzn.hibernate.model;

          public class Person {
              
          private int id;
              
          private String name;
              
          private int age;
              
          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 int getAge() {
                  
          return age;
              }
              
          public void setAge(int age) {
                  
          this.age = age;
              }
              
              
          }    
          Student.java
          package com.zzn.hibernate.model;

          public class Student extends Person {
              
          private String cardId;

              
          public String getCardId() {
                  
          return cardId;
              }

              
          public void setCardId(String cardId) {
                  
          this.cardId = cardId;
              }

          }

          Teacher.java
          package com.zzn.hibernate.model;

          public class Teacher extends Person {
              
          private int salary;
              
          public int getSalary() {
                  
          return salary;
              }
              
          public void setSalary(int salary) {
                  
          this.salary = salary;
              }
          }
          一張表對應一整棵類繼承樹時
          Person.hbm.xml
          <?xml version="1.0" encoding='gb2312'?>  
          <!DOCTYPE hibernate-mapping PUBLIC  
                  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
                  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
          >  
               
          <hibernate-mapping package="com.zzn.hibernate.model">

              
          <class name="Person" table="person">
                  
          <id name="id" column="id">
                      
          <generator class="identity" />
                  
          </id>
                  
          <discriminator column="personType" type="java.lang.String" />   <!-- 指定描述符對應的列明,注意discrimination標簽只能緊跟在id標簽后面 -->
                  
                  
          <property name="name" type="java.lang.String" />                <!-- 公用的name屬性,被兩個sbuclass標簽所用 -->
                  
          <property name="age" type="java.lang.Integer" />                <!-- 公用的age屬性,被兩個sbuclass標簽所用 -->
                  
                  
          <subclass name="Student" discriminator-value="student">            <!-- 映射子類Student,描述符是student,此時已經映射Student類,所以不必再寫Student.hbm.xml -->
                      
          <property name="cardId" type="java.lang.String" />            <!-- Student私有的屬性 -->
                  
          </subclass>
                  
          <subclass name="Teacher" discriminator-value="teacher" >
                      
          <property name="salary" type="java.lang.Integer" />            <!-- Teacher私有的屬性 -->
                  
          </subclass>
                      
              
          </class>
              
          </hibernate-mapping>
          一個類對應一張表
          <?xml version="1.0" encoding='gb2312'?>  
          <!DOCTYPE hibernate-mapping PUBLIC  
                  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
                  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
          >  
               
          <hibernate-mapping package="com.zzn.hibernate.model">

              
          <class name="Person" table="person">
                  
          <id name="id" column="id">
                      
          <generator class="identity" />
                  
          </id>
                  
          <property name="name" type="java.lang.String" />                
                  
          <property name="age" type="java.lang.Integer" />
                  
          <joined-subclass name="Student" table="student">
                      
          <key column="id" />
                      
          <property name="cardId" type="java.lang.String" />
                  
          </joined-subclass>
                  
                  
          <joined-subclass name="Teacher" table="teacher">
                      
          <key column="id"/>
                      
          <property name="salary" type="java.lang.Integer" />
                  
          </joined-subclass>
              
          </class>
              
          </hibernate-mapping>

          hibernate.hbm.xml
          <?xml version='1.0' encoding='UTF-8'?>
          <!DOCTYPE hibernate-configuration PUBLIC
                    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
          >
          <hibernate-configuration>
              
          <session-factory>
                  
          <property name="show_sql">true</property>
                  
          <property name="hibernate.hbm2ddl.auto">update</property>
                  
          <property name="connection.username">sa</property>
                  
          <property name="connection.password"></property>
                  
          <property name="connection.url">jdbc:jtds:sqlserver://localhost:1433;databasename=hibernate_test</property>
                  
          <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
                  
          <property name="myeclipse.connection.profile">SQL2005</property>
                  
          <property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
                  
          <mapping resource="com/zzn/hibernate/model/Person.hbm.xml"/>
              
          </session-factory>
          </hibernate-configuration>
          測試文件SubclassTest.java
          package com.zzn.hibernate.test;

          import java.util.Iterator;

          import org.hibernate.Query;
          import org.hibernate.Session;
          import org.hibernate.SessionFactory;
          import org.hibernate.Transaction;
          import org.hibernate.cfg.Configuration;

          import com.zzn.hibernate.model.Person;
          import com.zzn.hibernate.model.Student;
          import com.zzn.hibernate.model.Teacher;

          public class SubClassTest {
              
          public static void main(String[] args) {
                  add();
                  select();
              }

              
          public static void add() {
                  Configuration configuration 
          = null;
                  SessionFactory sessionFactory 
          = null;
                  Session session 
          = null;
                  Transaction transaction 
          = null;
                  Student student 
          = new Student();
                  Teacher teacher 
          = new Teacher();
                  
          try {
                      configuration 
          = new Configuration();
                      sessionFactory 
          = configuration.configure().buildSessionFactory();
                      session 
          = sessionFactory.openSession();
                      transaction 
          = session.beginTransaction();
                      student.setName(
          "shanshan");
                      student.setAge(
          25);
                      student.setCardId(
          "123456");
                      teacher.setName(
          "xiaolan");
                      teacher.setAge(
          25);
                      teacher.setSalary(
          5000);
                      session.save(student);
                      session.save(teacher);
                  } 
          finally {
                      
          if (session != null) {
                          transaction.commit();
                          session.close();
                      }
                  }
              }
              
              
          public static void select(){
                  Configuration configuration 
          = null;
                  SessionFactory sessionFactory 
          = null;
                  Session session 
          = null;
                  
          try {
                      configuration 
          = new Configuration();
                      sessionFactory 
          = configuration.configure().buildSessionFactory();
                      session 
          = sessionFactory.openSession();
                      Query query 
          = session.createQuery("from Person");
                      Iterator iterator 
          = query.list().iterator();
                      
          while (iterator.hasNext()){
                          Person person 
          = (Person)iterator.next();
                          System.out.println(person.getName());
                      }
                  } 
          finally {
                      
          if (session != null) {
                          session.close();
                      }
                  }
              }
          }

          posted on 2009-06-30 21:38 生命的綻放 閱讀(424) 評論(0)  編輯  收藏 所屬分類: Hibernate

          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導航

          統計

          常用鏈接

          留言簿(5)

          隨筆分類(94)

          隨筆檔案(93)

          文章分類(5)

          文章檔案(5)

          相冊

          JAVA之橋

          SQL之音

          兄弟之窗

          常用工具下載

          積分與排名

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 辽阳县| 吉木萨尔县| 清水县| 南华县| 苍山县| 灯塔市| 宝鸡市| 姜堰市| 高要市| 德安县| 蚌埠市| 靖西县| 林周县| 自贡市| 荣成市| 小金县| 仁怀市| 修武县| 兰溪市| 临城县| 文山县| 文登市| 玉树县| 沙坪坝区| 浏阳市| 富阳市| 兴和县| 平阳县| 华安县| 阳泉市| 密云县| 韶关市| 东海县| 耒阳市| 鄯善县| 台南市| 汉沽区| 唐海县| 会昌县| 泸溪县| 彭州市|