blogjava's web log

          blogjava's web log
          ...

          hibernate繼承-joined-subclass 已更新(五)

          還是和前面一樣。。先看先看由滿江紅翻譯團(tuán)隊(duì)(RedSaga Translate Team)翻譯的配置說明


          每個(gè)子類可能被映射到他自己的表中(每個(gè)子類一個(gè)表的策略)。被繼承的狀態(tài)通過和超類的表關(guān)聯(lián)得到。我們使用<joined-subclass>元素。
          <joined-subclass
                  name="ClassName"                    (1)
                  table="tablename"                   (2)
                  proxy="ProxyInterface"              (3)
                  lazy="true|false"                   (4)
                  dynamic-update="true|false"
                  dynamic-insert="true|false"
                  schema="schema"
                  catalog="catalog"
                  extends="SuperclassName"
                  persister="ClassName"
                  subselect="SQL expression"
                  entity-name="EntityName"
                  node="element-name">
          
                  <key .... >
          
                  <property .... />
                  .....
          </joined-subclass>
          (1)

          name: 子類的全限定名。

          (2)

          table: 子類的表名.

          (3)

          proxy (可選): 指定一個(gè)類或者接口,在延遲裝載時(shí)作為代理使用。

          (4)

          lazy (可選, 默認(rèn)是 true): 設(shè)置為 lazy="false" 禁止使用延遲裝載。

          這種映射策略不需要指定辨別標(biāo)志(discriminator)字段。但是,每一個(gè)子類都必須使用<key>元素指定一個(gè)表字段來持有對(duì)象的標(biāo)識(shí)符。


          好了。。。開始 寫代碼了。。。
          1.建表

          create?table?animal
          (aid?
          varchar(32)?not?null?primary?key)

          create?table?dog
          (aid?
          varchar(32)?not?null?primary?key,
          ?dname?
          varchar(16)
          )

          create?table?cat
          (aid?
          varchar(32)?not?null?primary?key,
          ?cname?
          varchar(16)
          )
          ?2 寫vo
          ?2.1 Animal.java
          package?com.test;

          public?class?Animal
          {
          ????
          private?String?aid;
          ??
          //getter?setter
          2.2
          Car.java
          package?com.test;

          public?class?Cat?extends?Animal
          {
          ????
          private?String?cname;

          //寫上?get?set?方法
          ? 2.3
          Dog.java
          package?com.test;

          public?class?Dog?extends?Animal
          {
          ????
          private?String?dname;
          //寫getter?setter

          3.寫配置文件
          <?xml?version="1.0"?>
          <!DOCTYPE?hibernate-mapping
          ????PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD//EN"
          ????"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
          >

          <hibernate-mapping>

          ????
          <class?name="com.test.Animal"?table="animal">??

          ????????
          <id?name="aid"?type="string"?unsaved-value="null"?>
          ????????????
          <column?name="aid"?sql-type="char(32)"?not-null="true"/>
          ????????????
          <generator?class="uuid.hex"/>
          ????????
          </id>
          ????????
          ????????
          <joined-subclass?name="com.test.Dog"?table="dog">
          ????????????
          <key?column="aid"/>
          ????????????
          <property?name="dname">
          ????????????????
          <column?name="dname"?sql-type="varchar(16)"/>
          ????????????
          </property>
          ????????
          </joined-subclass>

          ????????
          <joined-subclass?name="com.test.Cat"?table="cat">
          ????????????
          <key?column="aid"/>
          ????????????
          <property?name="cname">
          ????????????????
          <column?name="cname"?sql-type="varchar(16)"/>
          ????????????
          </property>
          ????????
          </joined-subclass>

          ????
          </class>

          </hibernate-mapping>

          4.寫上測(cè)試類
          package?com.test;

          import?net.sf.hibernate.Session;
          import?net.sf.hibernate.SessionFactory;
          import?net.sf.hibernate.cfg.Configuration;
          import?net.sf.hibernate.*;
          import?java.sql.*;
          import?java.util.List;
          import?java.util.Iterator;

          public?class?TestInherit2
          {
          ????SessionFactory?sf;
          ????Session?session;
          ????
          public?TestInherit2()
          ????
          {
          ????????
          try
          ????????
          {
          ????????????Configuration?cfg?
          =?new?Configuration();
          ????????????sf?
          =?cfg.addClass(Animal.class).buildSessionFactory();
          ????????}

          ????????
          catch(HibernateException?ex)
          ????????
          {
          ????????????ex.printStackTrace();
          ????????}

          ????}

          ????
          //插入
          ????public?void?doCreate()
          ????
          {
          ????????
          try
          ????????
          {
          ????????????session?
          =?sf.openSession();

          ????????????Dog?dog?
          =?new?Dog();
          ????????????dog.setDname(
          "small?dog");
          ????????????Cat?cat?
          =?new?Cat();
          ????????????cat.setCname(
          "small?cat");
          ????????????session.save(dog);
          ????????????session.save(cat);
          ????????????session.flush();
          ????????????session.connection().commit();

          ????????}

          ????????
          catch(HibernateException?ex)
          ????????
          {
          ????????????ex.printStackTrace();
          ????????}

          ????????
          catch(SQLException?ex1)
          ????????
          {
          ????????????ex1.printStackTrace();
          ????????}

          ????????
          finally
          ????????
          {
          ????????????????
          try{
          ????????????????????session.close();
          ????????????????}

          ????????????????
          catch(HibernateException?ex2){
          ????????????????}

          ????????}


          ????}

          ????
          //查詢
          ????public?void?doQuery()
          ????
          {
          ????????
          try{
          ????????????session?
          =?sf.openSession();
          ????????????Query?q?
          =?session.createQuery("select?d?from?Dog?as?d");
          ????????????List?l?
          =?q.list();
          ????????????Dog?dog?
          =?null;
          ????????????Cat?cat?
          =?null;
          ????????????
          for(int?i=0;i<l.size();i++)
          ????????????
          {
          ????????????????dog?
          =?(Dog)l.get(i);
          ????????????????System.out.println(dog.getDname());
          ????????????}

          ????????}

          ????????
          catch(HibernateException?ex){
          ????????????ex.printStackTrace();
          ????????}

          ????????
          finally{
          ????????????
          try{
          ????????????????session.close();
          ????????????}

          ????????????
          catch(HibernateException?ex2){
          ????????????}

          ????????}

          ????}

          ????
          public?static?void?main(String[]?args)
          ????
          {
          ????????TestInherit2?t?
          =?new?TestInherit2();
          ????????
          //t.doCreate();
          ????????t.doQuery();
          ????}

          }

          posted on 2006-04-11 22:28 record java and net 閱讀(3419) 評(píng)論(1)  編輯  收藏 所屬分類: java

          評(píng)論

          # re: hibernate繼承-joined-subclass 已更新(五) 2011-12-02 11:30 陳小東

          學(xué)習(xí)了  回復(fù)  更多評(píng)論   

          導(dǎo)航

          常用鏈接

          留言簿(44)

          新聞檔案

          2.動(dòng)態(tài)語言

          3.工具箱

          9.文檔教程

          友情鏈接

          搜索

          最新評(píng)論

          主站蜘蛛池模板: 嘉义县| 观塘区| 民勤县| 彩票| 称多县| 武平县| 司法| 郸城县| 建水县| 香格里拉县| 恩平市| 韩城市| 丹寨县| 黄龙县| 民勤县| 昂仁县| 彝良县| 台江县| 饶平县| 安义县| 北川| 孟连| 汝城县| 阿拉善盟| 余姚市| 酒泉市| 武冈市| 勃利县| 平昌县| 精河县| 揭阳市| 锦屏县| 房产| 黄冈市| 大竹县| 兰州市| 青海省| 阿合奇县| 鄂托克旗| 于都县| 四子王旗|