您的位置:首页 > 其它

Hibernate继承关系的实体设计的两种方法

2007-12-06 15:11 417 查看
1 对于父类和子类分别对应数据库中的一个表,父类表中的字段是公共的属性,子类表中是特殊的属性。
数据库表:
父表: titem 字段:id (id) name (名称) manufacturer (产地)
子表1:ibook 字段:id (id) pagecount(页数)
子表2:idvd 字段:id (id) regioncode (编号)
(1) 创建数据库:
--删除数据库表
[align=left]droptable Titem;[/align]
[align=left]droptable TBook;[/align]
[align=left]droptable TDVD;[/align]
[align=left]--创建数据库表[/align]
[align=left]createtable Titem([/align]
[align=left] id varchar(32) notnullprimarykey,[/align]
[align=left] namevarchar(20)notnull,[/align]
[align=left] manufacturer varchar()[/align]
[align=left]);[/align]
[align=left]createtable TBook([/align]
[align=left] id varchar(32) notnullprimarykey,[/align]
[align=left] pagecount int[/align]
[align=left]);[/align]
[align=left]createtable TDvd([/align]
[align=left] id varchar(32) notnullprimarykey,[/align]
[align=left] regioncode varchar(2)[/align]
);
(2)编写类文件:
[align=left]TItem类:[/align]
[align=left]package hibernate.hbu;[/align]
[align=left]publicclass TItem {[/align]
[align=left] [/align]
[align=left] private String id;[/align]
[align=left] [/align]
[align=left] private String name;[/align]
[align=left] [/align]
[align=left] private String manufacturer;[/align]
[align=left] [/align]
[align=left] public String getId() {[/align]
[align=left] returnid;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setId(String id) {[/align]
[align=left] this.id = id;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public String getManufacturer() {[/align]
[align=left] returnmanufacturer;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setManufacturer(String manufacturer) {[/align]
[align=left] this.manufacturer = manufacturer;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public String getName() {[/align]
[align=left] returnname;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setName(String name) {[/align]
[align=left] this.name = name;[/align]
[align=left] }[/align]
}
[align=left]TBook类:[/align]
[align=left]package hibernate.hbu;[/align]
[align=left] [/align]
[align=left]publicclass TBook extends TItem {[/align]
[align=left] [/align]
[align=left] privateintpagecount;[/align]
[align=left] [/align]
[align=left] publicint getPagecount() {[/align]
[align=left] returnpagecount;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setPagecount(int pagecount) {[/align]
[align=left] this.pagecount = pagecount;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]TDvd类:[/align]
[align=left]package hibernate.hbu;[/align]
[align=left] [/align]
[align=left]publicclass TDvd extends TItem {[/align]
[align=left] [/align]
[align=left] private String regioncode;[/align]
[align=left] [/align]
[align=left] public String getRegioncode() {[/align]
[align=left] returnregioncode;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] publicvoid setRegioncode(String regioncode) {[/align]
[align=left] this.regioncode = regioncode;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left](3)映射文件:titem.hbm.xml[/align]
[align=left]<?xml version="1.0" encoding="utf-8"?>[/align]
[align=left]<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"[/align]
[align=left]"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">[/align]
[align=left]<!-- [/align]
[align=left] Mapping file autogenerated by MyEclipse Persistence Tools[/align]
[align=left]-->[/align]
[align=left]<hibernate-mapping>[/align]
[align=left] <class name="hibernate.zyl.TItem" table="titem" catalog="test">[/align]
[align=left] <id name="id" type="java.lang.String">[/align]
[align=left] <column name="id" length="32" />[/align]
[align=left] <generator class="assigned" />[/align]
[align=left] </id>[/align]
[align=left] <property name="name" type="java.lang.String">[/align]
[align=left] <column name="name" length="20" not-null="true" />[/align]
[align=left] </property>[/align]
[align=left] <property name="manufacturer" type="java.lang.String">[/align]
[align=left] <column name="manufacturer" length="255" />[/align]
[align=left] </property>[/align]
[align=left] <joined-subclass name="hibernate.zyl.TBook" table="tbook">[/align]
[align=left] <key column="id"></key>[/align]
[align=left] <property name="pagecount" type="java.lang.Integer"[/align]
[align=left] column="pagecount">[/align]
[align=left] </property>[/align]
[align=left] </joined-subclass>[/align]
[align=left] <joined-subclass name="hibernate.zyl.TDvd" table="tdvd">[/align]
[align=left] <key column="id"></key>[/align]
[align=left] <property name="regioncode" type="java.lang.String"[/align]
[align=left] column="regioncode">[/align]
[align=left] </property>[/align]
[align=left] </joined-subclass>[/align]
[align=left] </class>[/align]
[align=left]</hibernate-mapping>[/align]
[align=left](3)测试类: Test.java[/align]
[align=left] package hibernate.zyl;[/align]
[align=left] [/align]
[align=left]import hibernate.sessionFactory.HibernateSessionFactory;[/align]
[align=left]import org.hibernate.Session;[/align]
[align=left]import org.hibernate.Transaction;[/align]
[align=left]publicclass Test {[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@paramargs[/align]
[align=left] */[/align]
[align=left] publicstaticvoid main(String[] args) {[/align]
[align=left] // TODO Auto-generated method stub[/align]
[align=left] [/align]
[align=left] Session session = HibernateSessionFactory.getSession();[/align]
[align=left] Transaction tr = null;[/align]
[align=left] [/align]
[align=left] // TDvd dvd = new TDvd();[/align]
[align=left] // dvd.setId("001");[/align]
[align=left] // dvd.setRegioncode("0");[/align]
[align=left] // dvd.setManufacturer("hebei");[/align]
[align=left] // dvd.setName("net");[/align]
[align=left] // dvd.setRegioncode("6");[/align]
[align=left] [/align]
[align=left] TBook book = new TBook();[/align]
[align=left] book.setId("005");[/align]
[align=left] book.setName("Java");[/align]
[align=left] book.setManufacturer("机械工业");[/align]
[align=left] book.setPagecount(66);[/align]
[align=left] [/align]
[align=left] tr = session.beginTransaction();[/align]
[align=left] // session.save(dvd);[/align]
[align=left] session.save(book);[/align]
[align=left] tr.commit();[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]2 在一个表中实现:[/align]
[align=left]表: Titem 字段:id name category(特殊的标志位) manufacturer(产地)[/align]
[align=left] pagecode(页数) regioncode(编号)[/align]
[align=left] 当category的值是1时,我们让此条记录指向一个TBook类,其中pagecode是具体的值,而regioncode的值是空的;当category的值是2时,我们让此条记录指向一个TDvd类,其中pagecode是空的,而regioncode的值是具体的值[/align]
[align=left] [/align]
(1) 创建数据库:
[align=left] --删除数据库表[/align]
[align=left]droptable Titem;[/align]
[align=left]--创建数据库表[/align]
[align=left]createtable Titem([/align]
[align=left] id varchar(32) notnullprimarykey,[/align]
[align=left] namevarchar(20)notnull,[/align]
[align=left] category varchar(50) notnull,[/align]
[align=left] manufacturer varchar(50),[/align]
[align=left] regioncode varchar(2),[/align]
[align=left] pagecount int[/align]
);
(2) 编写类文件:
类文件的内容和前面的相同,不过要指出:虽然在表中增加了一个category字段但我们并不在类文件中增加这个属性,只是在映射文件中加以配置。
(3)映射文件:titem.hbm.xml
[align=left]<?xml version="1.0" encoding="utf-8"?>[/align]
[align=left]<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"[/align]
[align=left]"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">[/align]
[align=left]<!-- [/align]
[align=left] Mapping file autogenerated by MyEclipse Persistence Tools[/align]
[align=left]-->[/align]
[align=left]<hibernate-mapping>[/align]
[align=left] <class name="hibernate.zyl.TItem" table="titem" catalog="test">[/align]
[align=left] <id name="id" type="java.lang.String">[/align]
[align=left] <column name="id" length="32" />[/align]
[align=left] <generator class="assigned" />[/align]
[align=left] </id>[/align]
[align=left] <discriminator column="category" type="java.lang.String"[/align]
[align=left] not-null="true" length="50">[/align]
[align=left] </discriminator>[/align]
[align=left] <property name="name" type="java.lang.String">[/align]
[align=left] <column name="name" length="20" not-null="true" />[/align]
[align=left] </property>[/align]
[align=left] <property name="manufacturer" type="java.lang.String">[/align]
[align=left] <column name="manufacturer" length="50" />[/align]
[align=left] </property>[/align]
[align=left] <subclass name="hibernate.zyl.TBook" discriminator-value="1">[/align]
[align=left] <property name="pagecount" column="pagecount"[/align]
[align=left] type="java.lang.Integer">[/align]
[align=left] </property>[/align]
[align=left] </subclass>[/align]
[align=left] <subclass name="hibernate.zyl.TDvd" discriminator-value="2">[/align]
[align=left] <property name="regioncode" column="regioncode"[/align]
[align=left] type="java.lang.String">[/align]
[align=left] </property>[/align]
[align=left] </subclass>[/align]
[align=left] </class>[/align]
[align=left]</hibernate-mapping>[/align]
[align=left](3)测试类: Test.java[/align]
[align=left] package hibernate.zyl;[/align]
[align=left] [/align]
[align=left]import java.util.Iterator;[/align]
[align=left] [/align]
[align=left]import org.hibernate.Query;[/align]
[align=left]import org.hibernate.Session;[/align]
[align=left]import org.hibernate.Transaction;[/align]
[align=left] [/align]
[align=left]import sessionFactory.HibernateSessionFactory;[/align]
[align=left] [/align]
[align=left]publicclass Test {[/align]
[align=left] [/align]
[align=left] /**[/align]
[align=left] *@paramargs[/align]
[align=left] */[/align]
[align=left] publicstaticvoid main(String[] args) {[/align]
[align=left] // TODO Auto-generated method stub[/align]
[align=left] [/align]
[align=left] Session session = HibernateSessionFactory.getSession();[/align]
[align=left] Transaction tr = null;[/align]
[align=left] [/align]
[align=left] // TBook book = new TBook();[/align]
[align=left] // book.setId("009");[/align]
[align=left] // book.setName("Java");[/align]
[align=left] // book.setManufacturer("石家庄");[/align]
[align=left] // book.setPagecount(2);[/align]
[align=left] [/align]
[align=left] // TDvd dvd = new TDvd();[/align]
[align=left] // dvd.setId("012");[/align]
[align=left] // dvd.setManufacturer("北京海淀");[/align]
[align=left] // dvd.setName("Advd");[/align]
[align=left] // dvd.setRegioncode("2");[/align]
[align=left] [/align]
[align=left] // tr = session.beginTransaction();[/align]
[align=left] // session.save(dvd);[/align]
[align=left] // tr.commit();[/align]
[align=left] [/align]
[align=left] TDvd dvd = null;[/align]
[align=left] TItem item = null;[/align]
[align=left] String hql = "from TItem t where t.id=?";[/align]
[align=left] Query q = session.createQuery(hql);[/align]
[align=left] q.setParameter(0, "012");[/align]
[align=left] Iterator it = q.list().iterator();[/align]
[align=left] while (it.hasNext()) {[/align]
[align=left] dvd = (TDvd) it.next();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] System.out.println(dvd.getManufacturer());[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]}[/align]

[align=left] [/align]
[align=left] [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: