本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7592281
建立时间:2006年5月29日




[Hibernate]hibernate继承之---subclass 已更新(四)
软件技术

lhwork 发表于 2007/1/7 14:06:52

先看由满江红翻译团队(RedSaga Translate Team)翻译的子类(subclass)说明,再来看我们的例子多态持久化需要为父类的每个子类都进行定义。对于“每一棵类继承树对应一个表”的策略来说,就需要使用<subclass>定义。 <subclass name="ClassName" (1) discriminator-value="discriminator_value" (2) proxy="ProxyInterface" (3) lazy="true|false" (4) dynamic-update="true|false" dynamic-insert="true|false" entity-name="EntityName" node="element-name"> <property .... /> .....</subclass>(1)name: 子类的全限定名。 (2)discriminator-value(辨别标志) (可选 - 默认为类名):一个用于区分每个独立的子类的值。 (3)proxy(代理) (可选): 指定一个类或者接口,在延迟装载时作为代理使用。 (4)lazy (可选, 默认是true): 设置为 lazy="false" 禁止使用延迟抓取 每个子类都应该定义它自己的持久化属性和子类。 <version> 和<id> 属性可以从根父类继承下来。在一棵继承树上的每个子类都必须定义一个唯一的discriminator-value。如果没有指定,就会使用Java类的全限定名。 可以在单独的映射文件中,直接在hibernate-mapping下定义subclass,union-subclass和joined-subclass映射。这样你只要增加一个新的映射文件就可以继承一棵类继承树。你必须在子类的映射中指定extends 属性来指定已映射的超类。注意:以前,这个特性使得映射文件的顺序变得很重要。从Hibernate3开始,当使用extends关键字的时候,映射文件的次序便不重要了。而在单一映射文件中,依旧需要保持将超类定义在子类之前这样的次序。 <hibernate-mapping> <subclass name="DomesticCat" extends="Cat" discriminator-value="D"> <property name="name" type="string"/> </subclass></hibernate-mapping>好了。。开始看例子了。。建表500)this.width=500'>create table animal500)this.width=500'>(aid varchar(32) not null primary key,500)this.width=500'> atype varchar(16),500)this.width=500'> dname varchar(16),500)this.width=500'> cname varchar(16)500)this.width=500'>)父类500)this.width=500'>package com.test;500)this.width=500'>500)this.width=500'>public class Animal500)this.width=500'>500)this.width=500'>500)this.width=500'>{500)this.width=500'>    private String aid;500)this.width=500'>   //geter seterCat500)this.width=500'>package com.test;500)this.width=500'>500)this.width=500'>public class Cat extends Animal500)this.width=500'>500)this.width=500'>500)this.width=500'>{500)this.width=500'>    private String cname;500)this.width=500'>  //geter seterDog 500)this.width=500'>package com.test;500)this.width=500'>500)this.width=500'>public class Dog extends Animal500)this.width=500'>500)this.width=500'>500)this.width=500'>{500)this.width=500'>    private String dname;500)this.width=500'>   //geter seter配置文件。。精华在这了.500)this.width=500'><?xml version="1.0"?>500)this.width=500'><!DOCTYPE hibernate-mapping500)this.width=500'>    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"500)this.width=500'>    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">500)this.width=500'>500)this.width=500'><hibernate-mapping>500)this.width=500'>500)this.width=500'>    <class name="com.test.Animal" table="animal">  500)this.width=500'>500)this.width=500'>        <id name="aid" type="string" unsaved-value="null" >500)this.width=500'>            <column name="aid" sql-type="char(32)" not-null="true"/>500)this.width=500'>            <generator class="uuid.hex"/>500)this.width=500'>        </id>500)this.width=500'>500)this.width=500'>        <discriminator column="atype" type="string" />500)this.width=500'>        500)this.width=500'>        <subclass name="com.test.Dog" discriminator-value="dog">500)this.width=500'>            <property name="dname">500)this.width=500'>                <column name="dname" sql-type="varchar(16)" />500)this.width=500'>            </property>500)this.width=500'>        </subclass>500)this.width=500'>500)this.width=500'>        <subclass name="com.test.Cat" discriminator-value="cat">500)this.width=500'>            <property name="cname">500)this.width=500'>                <column name="cname" sql-type="varchar(16)"/>500)this.width=500'>            </property>500)this.width=500'>        </subclass>500)this.width=500'>500)this.width=500'>    </class>500)this.width=500'>500)this.width=500'></hibernate-mapping>测试类500)this.width=500'>package com.test;500)this.width=500'>500)this.width=500'>import net.sf.hibernate.Session;500)this.width=500'>import net.sf.hibernate.SessionFactory;500)this.width=500'>import net.sf.hibernate.cfg.Configuration;500)this.width=500'>import net.sf.hibernate.*;500)this.width=500'>import java.sql.*;500)this.width=500'>import java.util.List;500)this.width=500'>import java.util.Iterator;500)this.width=500'>500)this.width=500'>public class TestInherit500)this.width=500'>500)this.width=500'>500)this.width=500'>{500)this.width=500'>    SessionFactory sf;500)this.width=500'>    Session session;500)this.width=500'>    public TestInherit()500)this.width=500'>500)this.width=500'>    500)this.width=500'>{500)this.width=500'>        try500)this.width=500'>500)this.width=500'>        500)this.width=500'>{500)this.width=500'>            Configuration cfg = new Configuration();500)this.width=500'>            sf = cfg.addClass(Animal.class).buildSessionFactory();500)this.width=500'>        }500)this.width=500'>        catch(HibernateException ex)500)this.width=500'>500)this.width=500'>        500)this.width=500'>{500)this.width=500'>            ex.printStackTrace();500)this.width=500'>        }500)this.width=500'>    }500)this.width=500'>    //插入500)this.width=500'>    public void doCreate()500)this.width=500'>500)this.width=500'>    500)this.width=500'>{500)this.width=500'>        try500)this.width=500'>500)this.width=500'>        500)this.width=500'>{500)this.width=500'>            session = sf.openSession();500)this.width=500'>500)this.width=500'>            Dog dog = new Dog();500)this.width=500'>            dog.setDname("small dog");500)this.width=500'>            Cat cat = new Cat();500)this.width=500'>            cat.setCname("small cat");500)this.width=500'>            session.save(dog);500)this.width=500'>            session.save(cat);500)this.width=500'>            session.flush();500)this.width=500'>            session.connection().commit();500)this.width=500'>500)this.width=500'>        }500)this.width=500'>        catch(HibernateException ex)500)this.width=500'>500)this.width=500'>        500)this.width=500'>{500)this.width=500'>            ex.printStackTrace();500)this.width=500'>        }500)this.width=500'>        catch(SQLException ex1)500)this.width=500'>500)this.width=500'>        500)this.width=500'>{500)this.width=500'>            ex1.printStackTrace();500)this.width=500'>        }500)this.width=500'>        finally500)this.width=500'>500)this.width=500'>        500)this.width=500'>{500)this.width=500'>500)this.width=500'>                try500)this.width=500'>{500)this.width=500'>                    session.close();500)this.width=500'>                }500)this.width=500'>500)this.width=500'>                catch(HibernateException ex2)500)this.width=500'>{500)this.width=500'>                }500)this.width=500'>        }500)this.width=500'>500)this.width=500'>    }500)this.width=500'>    //查询500)this.width=500'>    public void doQuery()500)this.width=500'>500)this.width=500'>    500)this.width=500'>{500)this.width=500'>500)this.width=500'>        try500)this.width=500'>{500)this.width=500'>            session = sf.openSession();500)this.width=500'>            Query q = session.createQuery("select d from Dog as d");500)this.width=500'>            List l = q.list();500)this.width=500'>            Dog dog = null;500)this.width=500'>            Cat cat = null;500)this.width=500'>            for(int i=0;i<l.size();i++)500)this.width=500'>500)this.width=500'>            500)this.width=500'>{500)this.width=500'>                dog = (Dog)l.get(i);500)this.width=500'>                System.out.println(dog.getDname());500)this.width=500'>            }500)this.width=500'>        }500)this.width=500'>500)this.width=500'>        catch(HibernateException ex)500)this.width=500'>{500)this.width=500'>            ex.printStackTrace();500)this.width=500'>        }500)this.width=500'>500)this.width=500'>        finally500)this.width=500'>{500)this.width=500'>500)this.width=500'>            try500)this.width=500'>{500)this.width=500'>                session.close();500)this.width=500'>            }500)this.width=500'>500)this.width=500'>            catch(HibernateException ex2)500)this.width=500'>{500)this.width=500'>            }500)this.width=500'>        }500)this.width=500'>    }500)this.width=500'>    public static void main(String[] args)500)this.width=500'>500)this.width=500'>    500)this.width=500'>{500)this.width=500'>        TestInherit t = new TestInherit();500)this.width=500'>        //t.doCreate();500)this.width=500'>        t.doQuery();500)this.width=500'>    }500)this.width=500'>}500)this.width=500'>


阅读全文(1934) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.344 second(s), page refreshed 144769982 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号