Hibernate系列之继承关系:共用一个表

hibernate.cfg.xml 的内容:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory>
 <property name="connection.username">sa</property>
 <property name="connection.url">
  jdbc:mysql://localhost:3306/db
 </property>
 <property name="dialect">
  org.hibernate.dialect.MySQLDialect
 </property>
 <property name="connection.driver_class">
  com.mysql.jdbc.Driver
 </property>

 

 

 <property name="hbm2ddl.auto">create</property>

 

 

 <property name="connection.pool_size">100</property>
 <property name="jdbc.batch_size">50</property>
 <property name="cache.use_second_level_cache">false</property>
 <mapping resource="Inheritance/oneTable.hbm.xml" />

</session-factory>

</hibernate-configuration> 

 

 

 

oneTable.hbm.xml 的内容:

 

<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping  auto-import="true" package="Inheritance">
<class name="Payment" table="PAYMENT">
    <id name="id" type="long" column="PAYMENT_ID">
        <generator class="native"/>
    </id>
    <discriminator column="PAYMENT_TYPE" type="string"/>
   
    <property name="amount" column="AMOUNT"/>
     <subclass name="CreditCardPayment" discriminator-value="CREDIT">
        <property name="creditCardType" column="CCTYPE"/>
    </subclass>
 
   <subclass name="CashPayment" discriminator-value="CashPayment">
        <property name="CashPaymentType" />
    </subclass>
  
</class>


</hibernate-mapping>

 

Payment的内容:

 

/*
 ************************************************************
 *本文件归属于有限公司,未经许可,不得擅自使用、拷贝和修改
 *项目组:ESB小组
 *版 本: SychroESB1.0
 *日 期:2007-11-19
 *时 间:下午02:02:25
 *作 者:Administrator
 ***********************************************************
 */
package Inheritance;

/**
 * TODO 此处描写类的详细信息和功能
 *
 * @author Administrator
 * @since jdk1.6
 */
public class Payment {
 Long id;
 Long amount;
 public Long getId() {
  return id;
 }

 public void setId(Long id) {
  this.id = id;
 }

 public Long getAmount() {
  return amount;
 }

 public void setAmount(Long amount) {
  this.amount = amount;
 }
}

 

 

CashPayment继承 Payment, 内容如下:

/*
 ************************************************************
 *本文件归属于软件有限公司,未经许可,不得擅自使用、拷贝和修改
 *项目组:ESB小组
 *版 本: SychroESB1.0
 *日 期:2007-11-19
 *时 间:下午02:04:31
 *作 者:Administrator
 ***********************************************************
 */
package Inheritance;

/**
 * TODO 此处描写类的详细信息和功能
 *
 * @author Administrator
 * @since jdk1.6
 */
public class CashPayment extends Payment {

 String CashPaymentType;

 public String getCashPaymentType() {
  return CashPaymentType;
 }

 public void setCashPaymentType(String cashPaymentType) {
  CashPaymentType = cashPaymentType;
 }

 

}

CreditCardPayment 也继承了   Payment,内容如下:

 

/*
 ************************************************************
 *本文件归属于软件有限公司,未经许可,不得擅自使用、拷贝和修改
 *项目组:ESB小组
 *版 本: SychroESB1.0
 *日 期:2007-11-19
 *时 间:下午02:04:31
 *作 者:Administrator
 ***********************************************************
 */
package Inheritance;

/**
 * TODO 此处描写类的详细信息和功能
 *
 * @author Administrator
 * @since jdk1.6
 */
public class CreditCardPayment extends Payment {

 String creditCardType;

 public String getCreditCardType() {
  return creditCardType;
 }

 public void setCreditCardType(String creditCardType) {
  this.creditCardType = creditCardType;
 }


}

 

一下是测试:

 

 

HibernateSessionFactory  的内容:

 

package person;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

/**
 * Configures and provides access to Hibernate sessions, tied to the
 * current thread of execution.  Follows the Thread Local Session
 * pattern, see {@link http://hibernate.org/42.html }.
 */
public class HibernateSessionFactory {

    /**
     * Location of hibernate.cfg.xml file.
     * Location should be on the classpath as Hibernate uses 
     * #resourceAsStream style lookup for its configuration file.
     * The default classpath location of the hibernate config file is
     * in the default package. Use #setConfigFile() to update
     * the location of the configuration file for the current session.  
     */
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
 private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private  static Configuration configuration = new Configuration();
    private static org.hibernate.SessionFactory sessionFactory;
    private static String configFile = CONFIG_FILE_LOCATION;

 static {
     try {
   configuration.configure(configFile);
   sessionFactory = configuration.buildSessionFactory();
  } catch (Exception e) {
   System.err
     .println("%%%% Error Creating SessionFactory %%%%");
   e.printStackTrace();
  }
    }
    private HibernateSessionFactory() {
    }
 
 /**
     * Returns the ThreadLocal Session instance.  Lazy initialize
     * the <code>SessionFactory</code> if needed.
     *
     *  @return Session
     *  @throws HibernateException
     */
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();

  if (session == null || !session.isOpen()) {
   if (sessionFactory == null) {
    rebuildSessionFactory();
   }
   session = (sessionFactory != null) ? sessionFactory.openSession()
     : null;
   threadLocal.set(session);
  }

        return session;
    }

 /**
     *  Rebuild hibernate session factory
     *
     */
 public static void rebuildSessionFactory() {
  try {
   configuration.configure(configFile);
   sessionFactory = configuration.buildSessionFactory();
  } catch (Exception e) {
   System.err
     .println("%%%% Error Creating SessionFactory %%%%");
   e.printStackTrace();
  }
 }

 /**
     *  Close the single hibernate session instance.
     *
     *  @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);

        if (session != null) {
            session.close();
        }
    }

 /**
     *  return session factory
     *
     */
 public static org.hibernate.SessionFactory getSessionFactory() {
  return sessionFactory;
 }

 /**
     *  return session factory
     *
     * session factory will be rebuilded in the next call
     */
 public static void setConfigFile(String configFile) {
  HibernateSessionFactory.configFile = configFile;
  sessionFactory = null;
 }

 /**
     *  return hibernate configuration
     *
     */
 public static Configuration getConfiguration() {
  return configuration;
 }

}

 

主测试类 Main :

 

package Inheritance;

import org.hibernate.Session;

import person.HibernateSessionFactory;

public class Main {

 public static void main(String[] args) throws Exception {
  long st = System.currentTimeMillis();

  Session s = HibernateSessionFactory.getSession();

  s.beginTransaction();


  CreditCardPayment  ccp=new CreditCardPayment();
  
  ccp.setAmount(new Long(222));
  ccp.setCreditCardType("dddd");
  
  s.save(ccp);
  
  CashPayment   cash=new CashPayment();
  
  cash.setAmount(new Long(200));
  
  cash.setCashPaymentType("cashPaymentType");
  s.save(cash);
  
  s.getTransaction().commit();

  s.close();
  long end = System.currentTimeMillis();
  System.out.println("用时: ");
  System.out.print(end - st);

 }
}

 

OK!  有问题 联系:  qq:81553652


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值