图解、详解Hibernate多对一映射

步骤1:案例代码。

步骤2:案例图解分析。

------------------------------------------------------------------------步骤1:案例代码-------------------------------------------------------------------------------------------------------------------

我们讲解Hibernate多对一映射的时候,首先想到的就是经典的多对一的关系,员工和部门,下面我们就来看看他们是如何映射的。

代码清单1:员工类

package 对象一对多;

public class Employment {
	private Integer id;
	private String name;
	private Department department;

	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 Department getDepartment() {
		return department;
	}

	public void setDepartment(Department department) {
		this.department = department;
	}

	@Override
	public String toString() {
		return "[员工编号:"+this.id+", 员工姓名:"+this.name+"]";
	}
}

代码清单2:部门类

package 对象一对多;

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

public class Department {
	private Integer id;
	private String name;
	private Set<Employment> empSet = new HashSet<Employment>();

	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 Set<Employment> getEmpSet() {
		return empSet;
	}

	public void setEmpSet(Set<Employment> empSet) {
		this.empSet = empSet;
	}

	@Override
	public String toString() {
		return "[部门 编号:"+this.id+",部门名称:"+this.name+"]";
	}

}

代码清单3:员工映射文件

<?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>
   <class name="对象一对多.Employment">
      <id name="id">
        <generator class="native"/>
      </id>
      <property name="name"/>
      <many-to-one name="department" class="对象一对多.Department" column="departmentId"/>
   </class>
</hibernate-mapping>

代码清单4:部门映射文件

<?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>
	<class name="对象一对多.Department">
	    <id name="id">
	      <generator class="native"/>
	    </id>
	    <property name="name"/>
	    <set name="empSet">
	      <key column="departmentId"/>
	      <one-to-many class="对象一对多.Employment"/>
	    </set>
	</class>
</hibernate-mapping>

代码清单5:客户执行

package 对象一对多;

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

import Utils.HibernateUtil;

public class Client {
	public static void main(String[] args) {
		Client.save();
	}
	public static void save() {
		Session session = null;
		Transaction transaction = null;
		try {
			session = HibernateUtil.getSession();
			transaction = session.beginTransaction();

			//接触关联
			Department department=(Department) session.get(Department.class, 1);
			Employment employment=(Employment) session.get(Employment.class,department.getId());
			employment.setDepartment(null);

            System.out.println(department);
            System.err.println(department.getEmpSet());

			transaction.commit();
		} catch (Exception e) {
			if (transaction != null) {
				transaction.rollback();
			}
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}
}

-------------------------------------------------------------------------步骤2:案例图解分析---------------------------------------------------------------------------------------------------------------

首先是先插入部门表, 再插入员工表。

如果是先插入员工表,在插入部门表呢?

辛苦了大半个晚上了,希望对大家有帮助,我就很开心了。

图解、详解Hibernate多对一映射

时间: 2024-08-14 21:50:05

图解、详解Hibernate多对一映射的相关文章

mybatis懒加载特性详解,以及多对多映射详解

注意讲解都在代码中 准备数据库,测试数据,各位自己添加,因为是多对多,所以使用中间表: 用到的实体: 学生类: public class Student { private Integer sid; private String name; private Integer age; //一个学生有多个老师,一个老师有多个学生 private List<Teacher> teachers=new ArrayList<Teacher>(); setter.. getter.... to

【SSH高速进阶】——Hibernate 多对多映射

说到多对多关系.印象最深刻的就是大学的选修课.一个学生能够选修多门课程,一门课程能够有多个学生选修,学生所选的每一门课程还有成绩. 这个场景的E-R图例如以下: 对于多对多的关系,我们一般会抽出一张中间表(连接表),来负责维护这两张表的多对多关系.比方上述关系应该生成的表结构为: PO对象 Student.java public class Student { private int id; private String name; private Set<Course> courses; /

hibernate 表关系映射详解之多对多

举例:商品类型表与商品表,每种类型对应多个商品,每个商品对应多种类型 关系图: hirbernate实现多对多映射有两种方法,第一种是通过中间表直接映射,第二种是通过中间表间接映射. 直接映射: 配置实体类(因为都是多对多的关系,所以双方都具有set集合): 配置实体类的映射文件: 分析:category类先通过category_Id与中间表tb_category_product建立联系,然后再通过多对多标签中的porduct_id与product类建立多对多联系. product类同上类似.

详解Hibernate中的二级缓存

1.前言 这篇博客再前几篇博客的基础上来讲解一下,Hibernate中的二级缓存,二级缓存是属于SessionFactory级别的缓存机制.第一级别的缓存是Session级别的缓存,是属于事务范围的缓存,由Hibernate管理,一般无需进行干预.第二级别的缓存是SessionFactory级别的缓存,是属于进程范围的缓存. 2.Hibernate二级缓存 1.分类 二级缓存也分为了两种 内置缓存:Hibernate自带的,不可卸载,通常在Hibernate的初始化阶段,Hibernate会把映

详解Hibernate中cascade与inverse

学习hibernate的时候对级联关系的概念老是分不清楚,尤其是cascade.inverse傻傻分不清.下面通过例子来简单说明. 准备工作: 首先创建数据库,新建两张表: 教室表classes (字段此处省) 学生表student(字段此处省) 教室与学生是一对多的关系. 然后新建项目,添加hibernate对两张表的支持. 1.cascade cascade表示级联操作,即两个实体间存在级联关系(一个类是另一个类中的属性)时,当保存.更新或删除一个实体时,是否对关联的实体做出相应操作(数据库

Hibernate多对多映射关系(5)

单向 n-n n-n 的关联必须使用连接表 与 1-n 映射类似,必须为 set 集合元素添加 key 子元素,指定 CATEGORIES_ITEMS 表中参照 CATEGORIES 表的外键为 CATEGORIY_ID. 与 1-n 关联映射不同的是,建立 n-n 关联时, 集合中的元素使用 many-to-many. many-to-many 子元素的 class 属性指定 items 集合中存放的是 Item 对象, column 属性指定 CATEGORIES_ITEMS 表中参照 IT

【Hibernate】详解Hibernate中的inverse=”true”

首先两个类,一个是班级类,一个是学生类: public class Grade{ private int id; private String name; private Set students = new HashSet(); } public class Student { private int id; private String studentName; } 数据库中表的结构: t_grade: 两个字段:id  name t_student: 三个字段:id  studentNam

hibernate多对多映射文件的配置

user.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate

详解Hibernate中的一级缓存

1.前言 在Hibernate中有三级缓存,本篇博客先详细的介绍一下,Hibernate中的一级缓存,也就是Session级别的缓存. 2.持久化对象 如果要说到Hibernate的缓存的话,那么首先咱得提一下hibernate中的持久化对象. 其中持久化对象有三种状态,分别是: transient(瞬时态):尚未与Session关联对象,失去引用的话,就会被JVM回收.一般就是直接New创建的对象. persistent(持久态):已经与当前session产生关联,并且相关联的session没