在数据库中建立连个表:post_delivery和express_delivery
post_delivery:id,recipient,phone,address,postcode,parcelNumber
express_delivery:id,recipient,phone,address,postcode,express_company,express_number
新建java project项目:chapter14_hierarchy
Add Hibernate Capabilities
手工编写Delivery.java PostDelivery.java ExpressDelivery.java
Delivery.java
代码:
/** * */ package com.b510.examples;
/** * * @author XHW * * @date 2011-7-9 * */ public abstract 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="delivery" catalog="users" abstract="true"> <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>
<union-subclass name="com.b510.examples.PostDelivery" table="post_delivery"> <property name="parcelNumber" type="java.lang.String"> <column name="parcel_number" length="30" /> </property> </union-subclass> <union-subclass name="com.b510.examples.ExpressDelivery" table="express_delivery"> <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> </union-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