zoukankan      html  css  js  c++  java
  • 继承关系在hibernate中的orm实现

    显示多态声明的类只有在明确指定其类名的时候才能实例化得到其对应的类对象polymorphism=“explicit”;

    Java中个继承关系反应在hibernate的orm映射中的表现形式:最佳的方法是table per class hierarchy有利于高并发量的存取。相对于使用外键关联的父子类具有更高的使用效率,避免了多表查询。相对于使用每个子类一张表的模式使用显示多态的方法,如果父类改动的话那么子类必须也要改变,这样会造成连带影响。

    使用table per class hierarchy模式用法如下:

    Item类:

    package com.inspur.po;

     

    import java.io.Serializable;

     

    public class TItem implements Serializable{

        private int id;

        private String name;

        private String manufacturer;

        public int getId() {

           return id;

        }

        public void setId(int id) {

           this.id = id;

        }

        public String getName() {

           return name;

        }

        public void setName(String name) {

           this.name = name;

        }

        public String getManufacturer() {

           return manufacturer;

        }

        public void setManufacturer(String manufacturer) {

           this.manufacturer = manufacturer;

        }

        public TItem(int id, String name, String manufacturer) {

          

           this.id = id;

           this.name = name;

           this.manufacturer = manufacturer;

        }

        public TItem() {

          

        }

       

       

       

     

    }

    TBook类代码:

    package com.inspur.po;

     

    public class TBook extends TItem{

        private int pageCount;

     

        public int getPageCount() {

           return pageCount;

        }

     

        public void setPageCount(int pageCount) {

           this.pageCount = pageCount;

        }

     

        public TBook(int id, String name, String manufacturer, int pageCount) {

           super(id, name, manufacturer);

           this.pageCount = pageCount;

        }

     

        public TBook() {

          

        }

       

       

     

    }

    TDvd类代码如下:

    package com.inspur.po;

     

    public class TDvd extends TItem{

        private String regionCode;

     

        public String getRegionCode() {

           return regionCode;

        }

     

        public void setRegionCode(String regionCode) {

           this.regionCode = regionCode;

        }

     

        public TDvd(int id, String name, String manufacturer, String regionCode) {

           super(id, name, manufacturer);

           this.regionCode = regionCode;

        }

     

        public TDvd() {

          

        }

       

     

    }

    TItem.hbm.xml配置文件:

    <?xml version="1.0" encoding="utf-8"?>

    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

    <hibernate-mapping>

        <class name="com.inspur.po.TItem" table="t_item">

           <id name="id" column="id">

               <generator class="native"></generator>

           </id>

           <discriminator column="category" type="string"></discriminator>

           <property name="name" column="name" type="string"></property>

           <property name="manufacturer" column="manufacturer" type="string"></property>

           <subclass name="com.inspur.po.TBook" discriminator-value="2">

               <property name="pageCount" column="pageCount"></property>

              

           </subclass>

           <subclass name="com.inspur.po.TDvd" discriminator-value="1">

               <property name="regionCode" column="regionCode"></property>

           </subclass>

        </class>

    </hibernate-mapping>

    Test类代码:

    package com.inspur.test;

     

    import java.util.Iterator;

    import java.util.List;

     

    import org.hibernate.HibernateException;

    import org.hibernate.Session;

    import org.hibernate.SessionFactory;

    import org.hibernate.Transaction;

    import org.hibernate.cfg.Configuration;

     

    import com.inspur.po.TBook;

    import com.inspur.po.TDvd;

     

    import junit.framework.TestCase;

     

    public class Test extends TestCase {

        Session session=null;

     

        @Override

        protected void setUp() throws Exception {

           Configuration config=new Configuration().configure();

           SessionFactory sessionFactory=config.buildSessionFactory();

           session=sessionFactory.openSession();

          

        }

     

        @Override

        protected void tearDown() throws Exception {

           session.close();

        }

        public void testLoad(){

           TDvd dvd=null;

           List list=session.createQuery("from TDvd").list();

           Iterator it=list.iterator();

           while(it.hasNext()){

               dvd=(TDvd)it.next();

               System.out.println(dvd.getName());

              

           }

        }

        public void testInsert(){

           TDvd dvd=new TDvd();

           dvd.setManufacturer("英皇");

           dvd.setName("再不疯狂我们就老了");

           dvd.setRegionCode("5");

           Transaction tran=null;

           try{

               tran=session.beginTransaction();

               session.save(dvd);

               session.flush();

               tran.commit();

           }catch(HibernateException e){

               if(tran!=null){

                  try{

                      tran.rollback();

                  }catch(HibernateException e1){

                      e1.printStackTrace();

                  }

               }

               e.printStackTrace();

           }

        }

       

       

     

    }

     

  • 相关阅读:
    Dockerfile命令详解
    LXC与Docker Containers的区别
    CSP-S2019游记
    T3
    %%%%%%%%%%%%%%%%
    神炎皇 数学
    2019.9.27
    征途堆积出友情的永恒「堆优化dp」
    星空[好题][题意转化]
    分组[测试点分支+二分图判定]
  • 原文地址:https://www.cnblogs.com/moonfans/p/2955855.html
Copyright © 2011-2022 走看看