`

Hibernateday05继承关系union-subclass映射策略

 
阅读更多

 union-subclass映射策略
     特点:父表的数据保存在父表当中
           子表的数据保存在子表当中=父表的数据+子表的数据
       如果保存Product,数据保存在t_product表当中
       如果保存Book,数据保存在t_book表中,不会保存在t_product表中
      
  R.   create table g_product(
      p_id integer primary key,
      p_name varchar2(30),
      p_price number(4,2)
     )
--子表--
     create table g_book(
      p_id integer ,
      p_name varchar2(30),
      p_price number(4,2),
      c_author varchar2(40)
   );

  M:映射文件

1.在com.jsu.hb.pojo包中提供实体类Product.java和Book.java

package com.jsu.hb.pojo;

public class Product {
	private Integer id;
	private String name;
	private Double price;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Double getPrice() {
		return price;
	}
	public void setPrice(Double price) {
		this.price = price;
	}
	
}

    Book.java

package com.jsu.hb.pojo;

public class Book extends Product {
	private String author;

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}
	
}
 

2..建表

create table g_product(
      p_id integer primary key,
      p_name varchar2(30),
      p_price number(4,2)
     )
--子表--
     create table g_book(
      p_id integer ,
      p_name varchar2(30),
      p_price number(4,2),
      c_author varchar2(40)
   );

 3.M. 提供所需要的映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jsu.hb.pojo">
	<!-- name:所操作对象的全路径 table:该对象所对应的表名 -->
	<class name="Product" table="g_product">
		<id name="id" column="p_id">
			<generator class="increment"></generator>
		</id>
		<!-- 普通属性的配置,非主键属性的配置 -->
		<property name="name" column="p_name"></property>
		<property name="price" column="p_price"></property>
		<!-- 采用union-subclass处理book子类 -->
            <union-subclass name="Book" table="g_book">
            <!---g_book的其他属性由Product提供,无须配置附表的字段,not-null="true" 不能为空-->
            <property name="author" column="c_author" not-null="true">
            </property>
         </union-subclass>
	</class>
</hibernate-mapping>

 4.在hibernate.cfg.xml文件中进行注册

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory> 
		<!-- show_sql:是否显示hibernate执行的SQL语句,默认为false -->
		<property name="show_sql">true</property>
		<!-- show_sql:是否显示hibernate执行格式化输出的SQL语句,默认为false -->
		<property name="format_sql">true</property>
		<!-- 配置与数据库连接的参数 -->
		<property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
		<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:oracle</property>
		<property name="connection.username">scott</property>
		<property name="connection.password">tiger</property>
		<!-- 2.自身属性相关的配置
			dialect:方言
			hibernate根据dialect的配置进行特定数据性能方面的调优
		 -->
		<property name="dialect">org.hibernate.dialect.Oracle9iDialect</property>
		<mapping resource="com/jsu/hb/pojo/union.hbm.xml"></mapping>
	</session-factory>
</hibernate-configuration>

 5.提供工具类HibernateUtil.java

package com.jsu.hb.util;

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

public class HibernateUtil {
	private static SessionFactory sf;
	private static ThreadLocal<Session> tl= new ThreadLocal<Session>();
	static{
		try{
				Configuration cfg = new Configuration();
				cfg.configure();
				sf=cfg.buildSessionFactory();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	public static Session openSession(){
		return sf.openSession();
	}
	public static Session getCurrentSession(){
		Session session = tl.get();//先从储存的线程中查找
		if(session==null){
			session=openSession();
			tl.set(session);
			return session;
		}
		return session;
	}
}

 6.在测试类中

public class TestExtends {
	@Test
	public void testSubclass() {
		Product p = new Product();
		p.setName("汽车");
		p.setPrice(31.0);

		Book b = new Book();
		b.setName("月子2");
		b.setPrice(99.0);
		b.setAuthor("白云");

		Session session = HibernateUtil.getCurrentSession();
		Transaction tx = session.getTransaction();
		tx.begin();
		 session.save(p);
		session.save(b);
		tx.commit();

	}
}
 
分享到:
评论

相关推荐

    Hibernate ORM - 继承关联关系之union-subclass

    NULL 博文链接:https://dreamzhong.iteye.com/blog/1203023

    efi-memory-subclass-specification

    efi-memory-subclass-specification

    react-subclass:React CSS子类

    演示版npm start dev然后访问用法import subClass from 'react-subclass' ;@ subClassclass App extends React . Component { render ( ) { return ( &lt; div&gt; &lt; div subClass = 'main'&gt; &lt; div subClass = 'title'&gt; ...

    NHibernate中文帮助手册API

    联合子类(union-subclass)  5.1.16. 连接  5.1.17. map, set, list, bag  5.1.18. 引用(import)  5.2. NHibernate 的类型  5.2.1. 实体(Entities)和值(values)  5.2.2. 基本值类型  5.2.3. 自定义值...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

    HibernateAPI中文版.chm

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

    hibernate3.2中文文档(chm格式)

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

    Allegro-Class(类)SubClass(子类)层功能介绍 .docx

    Allegro-Class(类)SubClass(子类)层功能介绍 .docx

    Hibernate3的帮助文档

    8. 关联关系映射 8.1. 介绍 8.2. 单向关联(Unidirectional associations) 8.2.1. 多对一(many to one) 8.2.2. 一对一(one to one) 8.2.3. 一对多(one to many) 8.3. 使用连接表的单向关联...

    NHibernate中文帮组文档(2008.11月更新)

    5.1.15. 联合子类(union-subclass) 5.1.16. 连接 5.1.17. map, set, list, bag 5.1.18. 引用(import) 5.2. NHibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5.2.4. Any...

    json-subclass

    json-子类 JSON 和多态 Java 对象之间的转换 StackOverflow 问题中引用的代码

    浅谈Python中重载isinstance继承关系的问题

    判断继承关系 通过内建方法 isinstance(object, classinfo) 可以判断一个对象是否是某个类的实例。这个关系可以是直接,间接或抽象。 实例的检查是允许重载的,可见文档customizing-instance-and-subclass-checks ...

    Hibernate+中文文档

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

    Hibernate中文详细学习文档

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

    hibernate 框架详解

    8. 关联关系映射 8.1. 介绍 8.2. 单向关联(Unidirectional associations) 8.2.1. 多对一(many to one) 8.2.2. 一对一(one to one) 8.2.3. 一对多(one to many) 8.3. 使用连接表的单向关联...

    Instance of Subclass, Subclass, Instance of Superclass, Superclass,

    Instance of Subclass, Subclass, Instance of Superclass, Superclass,及方法直接的关系

    Hibernate参考文档

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联(Unidirectional ...

    hibernate3.04中文文档.chm

    8. 关联关系映射 8.1. 介绍 8.2. 单向关联(Unidirectional associations) 8.2.1. 多对一(many to one) 8.2.2. 一对一(one to one) 8.2.3. 一对多(one to many) 8.3. 使用连接表的单向关联...

    Hibernate3.1_学习源码

    配置文件:只配置父类的映射文件,在其中加入joined-subclass将两个子类实体映射关系添加 2) 数据库表:一张表,包括公共字段、特有字段、区分字段 实体层设计:与第一种方法设计一样,设计三个实体类,分父类和...

    hibernate 体系结构与配置 参考文档(html)

    7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...

Global site tag (gtag.js) - Google Analytics