Hibernate 中继承映射之三 每一个类一个表

在数据库中建立表:

mail:id,redipient,phone,address,postcode             <id><pk>

post_mail:id,parcel_number                                  <id><pk,fk(mail)>

express_mail:id,express_number,express_company  <id><pk,fk(mail)>

新建java project项目:chapter14_pertable

Add  Hibernate Capabilities

手工编写  Delivery.java         PostDelivery.java            ExperssDelivey.java

Delivery.java

代码:

/**
 *
 */
package com.b510.examples;

/**
 *
 * @author XHW
 *
 * @date 2011-7-9
 *
 */
public class Delivery {

 private Integer id;
 private String recipient;
 private String phone;
 private String address;
 private String postcode;
 /**
  * @return the id
  */
 public Integer getId() {
  return id;
 }
 /**
  * @param id the id to set
  */
 public void setId(Integer id) {
  this.id = id;
 }
 /**
  * @return the recipient
  */
 public String getRecipient() {
  return recipient;
 }
 /**
  * @param recipient the recipient to set
  */
 public void setRecipient(String recipient) {
  this.recipient = recipient;
 }
 /**
  * @return the phone
  */
 public String getPhone() {
  return phone;
 }
 /**
  * @param phone the phone to set
  */
 public void setPhone(String phone) {
  this.phone = phone;
 }
 /**
  * @return the address
  */
 public String getAddress() {
  return address;
 }
 /**
  * @param address the address to set
  */
 public void setAddress(String address) {
  this.address = address;
 }
 /**
  * @return the postcode
  */
 public String getPostcode() {
  return postcode;
 }
 /**
  * @param postcode the postcode to set
  */
 public void setPostcode(String postcode) {
  this.postcode = postcode;
 }
 
}

PostDelivery.java

代码:

/**
 *
 */
package com.b510.examples;

/**
 *
 * @author XHW
 *
 * @date 2011-7-9
 *
 */
public class PostDelivery extends Delivery{

 private String parcelNumber;

 /**
  * @return the parcelNumber
  */
 public String getparcelNumber() {
  return parcelNumber;
 }

 /**
  * @param parcelNumber the parcelNumber to set
  */
 public void setparcelNumber(String parcelNumber) {
  this.parcelNumber = parcelNumber;
 } 
}

ExpressDelivery.java

代码;

/**
 *
 */
package com.b510.examples;

/**
 *
 * @author XHW
 *
 * @date 2011-7-9
 *
 */
public class ExpressDelivery extends Delivery {

 private String expressNumber;
 private String expressCompany;
 /**
  * @return the expressNumber
  */
 public String getExpressNumber() {
  return expressNumber;
 }
 /**
  * @param expressNumber the expressNumber to set
  */
 public void setExpressNumber(String expressNumber) {
  this.expressNumber = expressNumber;
 }
 /**
  * @return the expressCompany
  */
 public String getExpressCompany() {
  return expressCompany;
 }
 /**
  * @param expressCompany the expressCompany to set
  */
 public void setExpressCompany(String expressCompany) {
  this.expressCompany = expressCompany;
 }
}

Delivery.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.b510.examples.Delivery" table="mail" catalog="users">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="increment" />
        </id>
        <property name="recipient" type="java.lang.String">
            <column name="recipient" length="200" />
        </property>
        <property name="phone" type="java.lang.String">
            <column name="phone" length="200" />
        </property>
        <property name="address" type="java.lang.String">
            <column name="address" length="400" />
        </property>
        <property name="postcode" type="java.lang.String">
            <column name="postcode" length="10" />
        </property>

  
        <joined-subclass name="com.b510.examples.PostDelivery" table="post_mail">
        <key column="id" foreign-key="id"></key>
        <property name="parcelNumber" type="java.lang.String">
            <column name="parcel_number" length="30" />
        </property>
        </joined-subclass>
        
        
        <joined-subclass name="com.b510.examples.ExpressDelivery" table="express_mail">
        <key column="id" foreign-key="id"></key>
        <property name="expressCompany" type="java.lang.String">
            <column name="express_company" length="40" />
        </property>
        <property name="expressNumber" type="java.lang.String">
            <column name="express_number" length="40" />
        </property>
        </joined-subclass>
    </class>
</hibernate-mapping>

测试代码:

HibernateTest.java

代码:

/**
 *
 */
package com.b510.examples;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author XHW
 *
 * @date 2011-7-9
 *
 */
public class HibernateTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  HibernateTest test=new HibernateTest();
  //test.insertDelivery();
  test.listPostDelivery();
  test.listExpressDelivery();
  
 }

 public void insertDelivery() {
  Session session = HibernateSessionFactoryUtil.getSessionFactory()
    .openSession();
  Transaction tx = session.beginTransaction();

  PostDelivery post = new PostDelivery();
  post.setRecipient("Hongten");
  post.setAddress("广州大学");
  post.setPhone("115");
  post.setPostcode("510006");
  post.setparcelNumber("订单号:ACD123SDJF23");

  ExpressDelivery express = new ExpressDelivery();
  express.setRecipient("HongWei");
  express.setAddress("四川成都");
  express.setPhone("123465");
  express.setPostcode("456789");
  express.setExpressNumber("订单号:423SDFSJDKLF");
  express.setExpressCompany("顺丰快递公司");
  try {
   session.save(post);
   session.save(express);
  } catch (Exception e) {
   e.printStackTrace();
   if (tx.isActive()) {
    tx.rollback();
   }
  }
  session.getTransaction().commit();
 }
 
 public void listPostDelivery(){
  Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
  session.beginTransaction();
  Query query=session.createQuery("from PostDelivery");
  List<PostDelivery> list=query.list();
  session.getTransaction().commit();
  for(PostDelivery post:list){
   System.out.println(post.getId());
   System.out.println(post.getAddress());
   System.out.println(post.getRecipient());
   System.out.println(post.getparcelNumber());
  }
 }
 public void listExpressDelivery(){
  Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
  session.beginTransaction();
  Query query=session.createQuery("from ExpressDelivery");
  List<ExpressDelivery> list=query.list();
  session.getTransaction().commit();
  for(ExpressDelivery express:list){
   System.out.println(express.getId());
   System.out.println(express.getAddress());
   System.out.println(express.getRecipient());
   System.out.println(express.getExpressCompany());
   System.out.println(express.getExpressNumber());
  }
 }
}

运行效果:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate:
    select
        postdelive0_.id as id0_,
        postdelive0_1_.recipient as recipient0_,
        postdelive0_1_.phone as phone0_,
        postdelive0_1_.address as address0_,
        postdelive0_1_.postcode as postcode0_,
        postdelive0_.parcel_number as parcel2_1_
    from
        post_mail postdelive0_
    inner join
        users.mail postdelive0_1_
            on postdelive0_.id=postdelive0_1_.id
1
广州大学
Hongten
订单号:ACD123SDJF23
Hibernate:
    select
        expressdel0_.id as id0_,
        expressdel0_1_.recipient as recipient0_,
        expressdel0_1_.phone as phone0_,
        expressdel0_1_.address as address0_,
        expressdel0_1_.postcode as postcode0_,
        expressdel0_.express_company as express2_2_,
        expressdel0_.express_number as express3_2_
    from
        express_mail expressdel0_
    inner join
        users.mail expressdel0_1_
            on expressdel0_.id=expressdel0_1_.id
2
四川成都
HongWei
顺丰快递公司
订单号:423SDFSJDKLF

原文地址:https://www.cnblogs.com/hongten/p/2102048.html