`

继承关系(一张表)

阅读更多
employee
字段名 主键 类型 描述
id pk int 员工编号
name   varchar(50) 员工姓名
department_id fk int 所属部门编号
type   int 所属员工类型
skill   varchar(50) 技能员工(type=1)
sell   int 销售员工(type=2)
package domain;

import java.util.Set;

public class Department {
	private int id;
	private String name;
	private Set<Employee> emps;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Set<Employee> getEmps() {
		return emps;
	}
	public void setEmps(Set<Employee> emps) {
		this.emps = emps;
	}
	
	
	
}

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  
<hibernate-mapping package="domain">
	<class name="Department" table="`department`">
	  	<id name="id" column="`id`">
	  	  <generator class="native"></generator>
	  	</id>
	  	<properties name="name"></properties>
	  	<set name="emps">
	  		<key column="depart_id"></key>
	  		<one-to-many class="Employee"/>
	  	</set>
	  	</class>
</hibernate-mapping>

 

package domain;

public class Employee {
	private int id;
	private String name;
	private Department department;
	
	public Department getDepartment() {
		return department;
	}
	public void setDepartment(Department department) {
		this.department = department;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	

}

 

package domain;

public class Sales extends Employee {
	private int sell;

	public int getSell() {
		return sell;
	}

	public void setSell(int sell) {
		this.sell = sell;
	}
	

}

 

package domain;

public class Skiller extends Employee {

	private String skill;

	public String getSkill() {
		return skill;
	}

	public void setSkill(String skill) {
		this.skill = skill;
	}
	
}

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  
<hibernate-mapping package="domain">
	<class name="Employee" table="`employee`" discriminator-value="0">
	  	<id name="id" column="`id`">
	  	  <generator class="native"></generator>
	  	</id>
	  	<discriminator column="type" type="int"></discriminator>
	  	<properties name="name"></properties>
	  	<many-to-one name="department" column="depart_id"></many-to-one>
	  	<subclass name="Skiller" discriminator-value="1">
	  		<property name="skill"></property>
	  	</subclass>
	  	<subclass name="Sales" discriminator-value="2">
	  		<property name="sell"></property>
	  	</subclass>
	  	</class>
</hibernate-mapping>

 

测试:

package test;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.Transaction;
import org.hibernate.classic.Session;

import dao.HibernateUtil;
import domain.Department;
import domain.Employee;
import domain.Sales;
import domain.Skiller;

public class Extends {
	public static void main(String[] args) {
		add();
	}
	static void  add(){
	Session session = null;
	Transaction tx = null;
	try {
		Department depart = new Department();
		depart.setName("depart name 1");
		
		Employee emp1 = new Employee();
		emp1.setName("emp1");
		emp1.setDepartment(depart);
		
		
		Skiller emp2 = new Skiller();
		emp2.setName("emp2");
		emp2.setSkill("skill");
		emp2.setDepartment(depart);
		
	    Sales emp3 = new Sales();
		emp3.setName("emp3");
		emp3.setDepartment(depart);
		emp3.setSell(100);
		
		Set<Employee> emps = new HashSet<Employee>();
		emps.add(emp1);
		emps.add(emp2);
		emps.add(emp3);
		
		depart.setEmps(emps);
		session = (Session) HibernateUtil.getSession();
		tx = session.beginTransaction();
		session.save(depart);
		session.save(emps);
		tx.commit();
		
	} catch (Exception e) {
		// TODO: handle exception
	}finally{
		if(session != null){
			session.close();
		}
	}
}
}

 

分享到:
评论

相关推荐

    hibernate映射继承关系(每个类都对应一张表)

    Hibernate,作为Java中广泛使用的对象关系映射(ORM)框架,提供了多种方式来处理继承关系的映射,其中一种就是"每个类都对应一张表"的策略。本文将深入探讨这种映射方式,以及如何在Hibernate中实现它。 首先,...

    14 继承(一)(整个继承树映射到一张表)

    标题“14 继承(一)(整个继承树映射到一张表)”揭示了我们今天将探讨的主题——如何在数据库中通过ORM(对象关系映射)工具如Hibernate处理类的继承关系。 在Hibernate中,当一个类继承体系映射到数据库时,有几种...

    Hibernate继承映射二:每个子类一张表

    总结来说,“每个子类一张表”的继承映射策略是Hibernate提供的一种处理继承关系的方法,它将类的继承结构映射到数据库的多个表中。这种策略适合于子类具有大量特有属性的情况,但需要权衡可能带来的数据库设计复杂...

    java API 1.6继承关系

    制作本文档的目的是将类的继承关系可以打印成书,直观了解继承关系图,同时还罗列出接口继承与实现关系图及枚举继承图(其中枚举放于最后两页)。 我已用该文档装订了一本书,作为自己学习java的参考,希望快速提供...

    Hibernate继承映射的第一种策略:每棵类继承树对应一张表

    Hibernate继承映射是将Java类的继承关系映射到数据库表的一种策略,使得对象模型的复杂性能够平滑地转化为关系数据库模型。本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承...

    Mybatis表对象继承实现

    在数据库设计中,对象的继承关系可以通过不同的数据模型来实现。Mybatis作为一款流行的Java持久层框架,支持使用原生JDBC来实现复杂的SQL操作。其中,表对象继承(即数据库表中的继承关系)可以通过多种方式实现。...

    用Hibernate映射继承关系

    本主题聚焦于“用Hibernate映射继承关系”,我们将深入探讨Hibernate如何处理对象的继承层次结构,并将其映射到数据库中的表。 Hibernate支持多种继承策略,包括单一表继承(Single Table Inheritance)、联合表...

    java api 1.6继承表

    制作本文档的目的是将类的继承关系可以打印成书,直观了解继承关系图,同时还罗列出接口继承与实现关系图及枚举继承图(其中枚举放于最后两页)。 由于java api 1.6类及接口数量非常庞大,用一张图或若干张excel...

    Hibernate继承映射一:每个类分层结构一张表

    总之,“每个类分层结构一张表”是一种适合处理复杂类继承关系的映射策略,它在保持类结构清晰的同时,也带来了一定的数据库管理挑战。开发者应根据项目需求和数据规模来选择合适的继承映射方式。在实践中,结合使用...

    17 继承(四)每一个具体的类 映射到一张表

    标题中的“17 继承(四)每一个具体的类 映射到一张表”指出,我们将关注的是类继承在Hibernate中的映射策略。在传统的面向对象编程中,继承允许我们创建一个新类(子类)并继承父类的属性和方法,以此实现代码复用和...

    Hibernate继承关系映射.pdf

    单表映射策略将继承树中的所有类映射到同一张表中,通过一个额外的“识别字段”(通常称为`discriminator`)来区分不同类型的子类记录。 #### 示例代码 ```xml &lt;!-- 其他属性映射省略 --&gt; &lt;!-- Notepad...

    从UML类图到关系数据库表的代码生成方法

    4. 继承映射为表继承或单表策略:继承可以通过创建一张包含所有继承类共有字段的主表,以及一个或多个包含特定属性的子表来实现,或者使用单表策略来表示继承结构。 四、映射实现方式 映射实现方式指的是将UML类图...

    Hibernate继承映射的第一种策略:每个类对应一张表

    在Java的持久化框架Hibernate中,继承映射是处理对象模型中类继承关系的重要机制。本文将详细探讨“Hibernate继承映射的第一种策略:每个类对应一张表”的概念、实现方式以及其优缺点。 首先,我们需要理解...

    Hibernate继承映射的第一种策略:每个具体类一张表

    本篇文章将详细探讨Hibernate继承映射的策略,特别是“每个具体类一张表”(Table Per Concrete Class)的映射方式。 在面向对象编程中,继承是常见的代码复用手段,但在关系型数据库中,这种概念并不直接对应。...

    15 继承(二)(每个子类扩展的属性单独保存在一张表中)

    标题中的“15 继承(二)(每个子类扩展的属性单独保存在一张表中)”指的是在数据库设计中,特别是在使用对象关系映射(ORM)框架如Hibernate时,处理继承关系的一种策略——单表继承(Single Table Inheritance,STI)...

    hibernate的继承映射关系

    在软件开发领域,特别是使用面向对象编程语言如Java进行开发时,我们经常需要处理复杂的类继承关系。在ORM(Object-Relational Mapping)框架如Hibernate中,如何优雅地将这些继承关系映射到关系型数据库中,成为了一...

    继承关系映射和HibernateQBC查询

    ### 继承关系映射和Hibernate QBC查询 #### 继承关系映射 继承作为面向对象编程的一个核心概念,在Java等面向对象语言中极为常见。然而,在数据库中表示继承关系并不直观,因为数据库通常使用表格来存储数据,而...

Global site tag (gtag.js) - Google Analytics