hibernate繼承-joined-subclass 已更新(五)
還是和前面一樣。。先看先看由滿江紅翻譯團(tuán)隊(duì)(RedSaga Translate Team)翻譯的配置說明
每個(gè)子類可能被映射到他自己的表中(每個(gè)子類一個(gè)表的策略)。被繼承的狀態(tài)通過和超類的表關(guān)聯(lián)得到。我們使用<joined-subclass>元素。
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?setter2.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();
????}
}

每個(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.建表












?2.1 Animal.java








Car.java









Dog.java








3.寫配置文件































4.寫上測(cè)試類





































































































































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