前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HIbernate 中的 继承映射

HIbernate 中的 继承映射

作者头像
Hongten
发布2018-09-18 09:57:57
9430
发布2018-09-18 09:57:57
举报
文章被收录于专栏:Hongten

数据库中Delivery表:id,recipient,phone,address,postcode,delivery_type,parcel_number,express_company,express_number

新建java projet项目:chapter14_hierarch

Add Hibernate Capalities

在项目的src目录下面:com.b510.examples包中手工编写:

Delivery.java     PostDelivery.java     ExpressDelivery.java(其中:PostDeliver.java和ExpressDelivery.java都继承Delivery.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;  } }

用Hibernate逆向工程单独生成Delivery.hbm.xml映射文件:

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">         <id name="id" type="java.lang.Integer">             <column name="id" />             <generator class="increment" />         </id> <!-- 在这里加入判别是那一种邮递方式   -->         <discriminator column="delivery_type"></discriminator>         <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>

  <!-- 为delivery_type  传递值       Post和Express --> <subclass name="com.b510.examples.PostDelivery" discriminator-value="Post">         <property name="parcelNumber" type="java.lang.String">             <column name="parcel_number" length="30" />         </property>         </subclass> <subclass name="com.b510.examples.ExpressDelivery" discriminator-value="Express">         <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>         </subclass>     </class> </hibernate-mapping>

HibernateTest.java

代码:

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

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) {   new HibernateTest().insertDelivery();  }

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

  PostDelivery post = new PostDelivery();   post.setRecipient("Hongten");   post.setAddress("广州中医药大学");   post.setPhone("119");   post.setPostcode("510006");   post.setparcelNumber("订单号:abc123f23");

  ExpressDelivery express = new ExpressDelivery();   express.setRecipient("HongWei");   express.setAddress("云南昆明");   express.setPhone("123465");   express.setPostcode("456789");  express.setExpressNumber("订单号:456qwe87ewer");   express.setExpressCompany("顺丰快递公司");   try {    session.save(post);    session.save(express);   } catch (Exception e) {    e.printStackTrace();    if (tx.isActive()) {     tx.rollback();    }   }   session.getTransaction().commit();  } }

运行效果:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate:     select         max(id)     from         delivery Hibernate:     insert     into         users.delivery         (recipient, phone, address, postcode, parcel_number, delivery_type, id)     values         (?, ?, ?, ?, ?, 'Post', ?) Hibernate:     insert     into         users.delivery         (recipient, phone, address, postcode, express_company, express_number, delivery_type, id)     values         (?, ?, ?, ?, ?, ?, 'Express', ?)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-07-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档