Hibernate关联映射之_一对多

domain:

 1 package org.zln.hibernate.domain;
 2
 3 import java.util.Set;
 4
 5 /**
 6  * 部门Domain对象
 7  * Created by sherry on 000018/6/18 21:38.
 8  */
 9 public class Department {
10     private int id;
11     private String name;
12
13     private Set<Employee> employeeSet;
14
15     @Override
16     public String toString() {
17         return "Department{" +
18                 "id=" + id +
19                 ", name=‘" + name + ‘\‘‘ +
20                 ‘}‘;
21     }
22
23     public Set<Employee> getEmployeeSet() {
24         return employeeSet;
25     }
26
27     public void setEmployeeSet(Set<Employee> employeeSet) {
28         this.employeeSet = employeeSet;
29     }
30
31     public int getId() {
32         return id;
33     }
34
35     public void setId(int id) {
36         this.id = id;
37     }
38
39     public String getName() {
40         return name;
41     }
42
43     public void setName(String name) {
44         this.name = name;
45     }
46
47 }

映射文件

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping package="org.zln.hibernate.domain">
 6
 7     <class name="Department" table="department">
 8         <id name="id" column="id">
 9             <generator class="native"/>
10         </id>
11         <property name="name" column="name"/>
12         <!--一对多-->
13         <set name="employeeSet">
14             <!--主键作为条件查询员工表的外键-->
15             <key column="department_id"/>
16             <!--集合中存储元素的类型-->
17             <one-to-many class="Employee" />
18         </set>
19
20     </class>
21
22 </hibernate-mapping>

Dao

 1     public Department getDepartment(Department department){
 2         Department target = null;
 3         Session session = null;
 4         try {
 5             session = HibernateUtils.getSession();
 6             target = (Department) session.get(Department.class,department.getId());
 7             Hibernate.initialize(target.getEmployeeSet());
 8         }finally {
 9             if (session != null){
10                 session.close();
11             }
12         }
13         return target;
14     }

在查询部门的时候,根据配置的一对多的关系,会将部门对应的员工信息也查询出来映射到Set中

 1     /**
 2      * 新增部门及其员工
 3      * @param department
 4      * @param employeeSet
 5      */
 6     public void addDepartment(Department department,Set<Employee> employeeSet){
 7         Session session = null;
 8         Transaction transaction = null;
 9         try {
10             session = HibernateUtils.getSession();
11             transaction = session.beginTransaction();
12
13             department.setEmployeeSet(employeeSet);
14
15             /*保存部门*/
16             session.save(department);
17             /*保存员工*/
18             for (Employee employee:employeeSet){
19                 session.save(employee);
20             }
21             transaction.commit();
22         }finally {
23             if (session != null){
24                 session.close();
25             }
26         }
27     }

保存的员工会自带其部门外键

时间: 2024-08-01 22:42:51

Hibernate关联映射之_一对多的相关文章

Hibernate关联映射之_多对一

多对一 Employee-Department 对于 员工 和 部门 两个对象,从员工的角度来看,就是多对一的一个关系--->多个员工对应一个部门 表设计: 部门表:department,id主键 员工表:employee,id主键,depart_id作为外键,与部门表的主键对应 对象模型设计: 部门: 1 package org.zln.hibernate.domain; 2 3 /** 4 * 部门Domain对象 5 * Created by sherry on 000018/6/18 2

Hibernate关联映射之_一对一

数据库模型 一般对一对一的关系而言,会存在一个主从关系.如 人 与 身份证,就是一个一对一关系, 人 是主,身份证 是从 Person PK:id name age Id_Card PK.FK:id useful_life

第六章 Hibernate关联映射

第六章 hibernate关联映射一.本章知识点分为2部分:1.关联关系:单向多对一关联关系,双向一对多关联关系(含一对多关联关系),多对多关联关系2.延迟加载:类级别加载策略,一对多加载策略,多对一加载策略二.关联关系1.单向多对一关联关系1.1.概念(什么是单向多对一关联关系,举例说明)  以部门(Dept).Emp(员工)为例: 从员工角度看部门,是多个员工都在一个部门,这就叫单向 如部门编号为20的部门下可以有n个员工(如scott账户下emp表 empno 为7369,7566,778

Hibernate关联映射(单项多对一和一对多、双向一对多)

最近总是接触着新的知识点来扩展自己的知识面:不停的让自己在原地接触天空的感觉真的很美好!!!革命没有成功,程序员的我们怎么能不努力呢...... 一.用员工和部门来剖析关联映射的原理. 1)从这张截图可以看出我会站在员工的角度讲述:(单向关联) 关系:(多个员工对应一个部门)多对一的关系 意味:多个Emp对象只会引用一个Dept对象 方法:在Emp类中定义一个Dept类型属性,来引用所有关联的Dept对象 eg. 第一步建立两个实体类省略 第二步建立大配置 <?xml version='1.0'

hibernate关联映射(一对多)

这篇博客将会给大家带来hibernate的关联映射的学习.在现实生活中,不仅只是一对一的映射关系,更多的是一对多,多对多等. 一对多单项关联映射 这里我以网盘为例,一个用户可以拥有多个文件,及用户和文件之间是一对多的关系. user实体类: public class Users { private int uid; private String uname; //用户上传的所有文件 // one方 可以获取 many方 private Set<UpFile> files = new HashS

hibernate 之 关联映射的双向一对多关联

1. 考虑学生表 和 教师表,表结构和单向的表结构一样. 2. 类结构:Teacher.java public class Teacher { private int id; private String name; private Set<Student> students = new HashSet<Student>(); public Teacher() { } public Teacher(String name) { super(); this.name = name;

hibernate关联映射

本文可作为北京尚学堂马士兵hibernate课程的学习笔记. hibernate的映射,主要分为一对一,一对多,多对一,多对多,同时还要单向与双向的区别. OK,不要纠结于名字,我们开始看例子. 一对一单向 老公是一个实体,老婆也是一个实体. 一个老公只有一个老婆,同时一个老婆也只有一个老公. 上面的关系就叫做一对一. 什么叫单向呢. 看代码: package com.bjsxt.hibernate; @Entity public class Husband { private int id;

Hibernate关联映射 映射文件的配置

一:多对一单向关联 首先我们必须创建两个实体类 例如:Dept类 public class Dept { private Integer deptNo; private String dName; private String loc; private Set<Employee> emps=new HashSet<Employee>(); Employee类 public class Employee { private Integer empno; private String

Hibernate关联映射及高级查询

一.Hibernate中的关联关系 1.1.单向一对多关联关系 按照以下步骤配置hibernate中持久化类的一对多对象关联: (1).持久化类添加关联类的相关属性及getter/setter方法. (2).映射文件中建立该属性和数据库表字段的映射信息. 比如班级对学生是一对多的关系,班级类Grade类和Grade.hbm.xml文件如下: package com.pb.hibernate.po; import java.util.HashSet; import java.util.Set; p