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


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告

 


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:流浪狗
日志总数:44
评论数量:19
留言数量:-2
访问次数:191646
建立时间:2008年3月13日




[Hibernate]Hibernate 实体层设计
软件技术

流浪狗 发表于 2008/3/14 10:51:15

设计三个表TItem ,TBook 和TDVD ,TItem 存放明细,TBook存放书籍页数,TDVD存放DVD本数,TItem 和TBook ,TDVD 之间用id相关联 -- 删除表DROP TABLE TItem ; DROP TABLE TBook ; DROP TABLE TDVD ; -- 创建表CREATE TABLE TItem( id varchar(32) not null primary key , name varchar(20) not null , manufacturer varchar(20)) ; CREATE TABLE TBook( id varchar(32) not null primary key , pagecount int ) ; CREATE TABLE TDvd( id varchar(32) not null primary key , regioncode varchar(2)) ; -- 事务提交commit ; 每个表对应一个类\ TItem.java package org.cool.hibernate.demo03; public class TItem { private String id ; private String name ; private String manufacturer ; /**  * @return the id  */ public String getId() {  return id; } /**  * @param id the id to set  */ public void setId(String id) {  this.id = id; } /**  * @return the manufacturer  */ public String getManufacturer() {  return manufacturer; } /**  * @param manufacturer the manufacturer to set  */ public void setManufacturer(String manufacturer) {  this.manufacturer = manufacturer; } /**  * @return the name  */ public String getName() {  return name; } /**  * @param name the name to set  */ public void setName(String name) {  this.name = name; }} TBook.java package org.cool.hibernate.demo03; public class TBook extends TItem{ private int pageCount ;  /**  * @return the pageCount  */ public int getPageCount() {  return pageCount; }  /**  * @param pageCount the pageCount to set  */ public void setPageCount(int pageCount) {  this.pageCount = pageCount; }} TDVD.java package org.cool.hibernate.demo03; public class TDVD extends TItem{ private String regionCode ;  /**  * @return the regionCode  */ public String getRegionCode() {  return regionCode; }  /**  * @param regionCode the regionCode to set  */ public void setRegionCode(String regionCode) {  this.regionCode = regionCode; } } 配置文件Titem.hbm.xml <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--  Mapping file autogenerated by MyEclipse - Hibernate Tools--><hibernate-mapping> <class name="org.cool.hibernate.demo03.TItem" table="titem"  catalog="mydatabase">  <id name="id" type="string">   <column name="id" length="32" />   <generator class="assigned" />  </id>  <property name="name" type="string">   <column name="name" length="20" not-null="true" />  </property>    <property name="manufacturer" type="string">   <column name="manufacturer" length="20"></column>  </property>   <joined-subclass name="org.cool.hibernate.demo03.TBook" table="TBook">   <key column="ID"></key>   <property name="pageCount" type="java.lang.Integer" column="pagecount">   </property>  </joined-subclass>    <joined-subclass name="org.cool.hibernate.demo03.TDVD" table="TDvd">   <key column="ID"></key>   <property name="regionCode" type="java.lang.String" column="regioncode">   </property>  </joined-subclass> </class></hibernate-mapping> 操作类TItemOperate.java package org.cool.hibernate.demo03; import java.util.Iterator; import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration; public class TItemOperate { private Session session ; public TItemOperate() {  Configuration config = new Configuration().configure() ;  SessionFactory factory = config.buildSessionFactory() ;  this.session = factory.openSession() ; } // 增加操作,增加书或DVD // TBook和TDVD都是TItem的子类 public void insert(TItem item) {  this.session.save(item) ;  this.session.beginTransaction().commit() ;  this.session.close() ; } // 进行按ID查询操作 public TItem queryById(String id) {  TItem item = null ;  String hql = "FROM TItem AS t WHERE t.id=?" ;  Query q = this.session.createQuery(hql) ;  q.setString(0,id) ;  Iterator iter = q.list().iterator() ;  if(iter.hasNext())  {   item = (TItem)iter.next() ;  }  return item ; }} 测试类TestDemo03.java package org.cool.hibernate.demo03; public class TestDemo03 {  /**  * @param args  */ public static void main(String[] args) {  // TODO Auto-generated method stub  TItemOperate to = new TItemOperate() ;    TBook book = new TBook() ;  book.setId("ml001") ;  book.setName("JAVA EE从入门到精通") ;  book.setManufacturer("魔乐在线") ;  book.setPageCount(888) ;    /*  TDVD dvd = new TDVD() ;  dvd.setId("lxh002") ;  dvd.setName("JAVA EE学习视频") ;  dvd.setManufacturer("MLDN") ;  dvd.setRegionCode("6") ;  */  // 向数据库中执行插入操作  to.insert(book) ;  //  TBook book = (TBook)to.queryById("ml001") ;//  System.out.println(book.getName()) ; } } 执行插入TBook以后,发现在TItem和TBook中都有了数据,在插入TDVD的时候也是TItem和TDVD都有了数据全是贴的代码,其实主要就是配置文件中的颜色文字那块 将以上的三个表合成为一个表 -- 删除表DROP TABLE TItem ; -- 创建表CREATE TABLE TItem( id varchar(32) not null primary key , -- 通过此字段用于区分保存的是 Book还是 DVD category varchar(2) not null , name varchar(20) not null , manufacturer varchar(20) not null , regionCode varchar(2) , pageCount int ) ; -- 事务提交commit ; category 这个字段很特别,把上面的TItem,TBook,TDVD,TItemOperate,TestDemo03原样复制过来 配置文件Titem.hbm.xml <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--  Mapping file autogenerated by MyEclipse - Hibernate Tools--><hibernate-mapping package="org.cool.hibernate.demo04">    <class name="TItemDemo" table="titemdemo" catalog="mydatabase">        <id name="id" type="string">            <column name="id" length="32" />            <generator class="assigned" />        </id>        <discriminator column="category" type="string"></discriminator>        <property name="name" type="string">            <column name="name" length="20" not-null="true" />        </property>        <property name="manufacturer" type="string">            <column name="manufacturer" length="20" not-null="true" />        </property>               <subclass name="org.cool.hibernate.demo04.TBook" discriminator-value="1">         <property name="pageCount" type="integer">             <column name="pageCount" />         </property>        </subclass>        <subclass name="org.cool.hibernate.demo04.TDVD" discriminator-value="2">         <property name="regionCode" type="string">             <column name="regionCode" length="2" />         </property>        </subclass>    </class></hibernate-mapping>这样在运行测试程序TestDemo03.java的插入操作时,发现插入TBook的时候category字段的值是1,二插入TDVD的时候category字段的值是2 Table per subclass每一个子类对应一张子表,并与主类共享主表 Table per class hierarchy表与类的一对多关系    


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



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



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

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