Hibernage.cfg.xml:

<hibernate-configuration>
<session-factory name="sessionFactory">
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="cn/hbm/Person.hbm.xml" />
<mapping resource="cn/hbm/Department.hbm.xml" />
</session-factory>
</hibernate-configuration>

Person:

public class Person {
private Integer id;
private String name; 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;
}
}

hbm.xml:

<hibernate-mapping package="cn.model">
<class name="Person" table="PERSON">
<id name="id" column="ID">
<generator class="native"></generator>
</id>
<property name="name" column="NAME" type="java.lang.String" />
</class>
</hibernate-mapping>

Department:

public class Department {

	private Integer id;
private String name;
private Set<Person> persons; 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<Person> getPersons() {
return persons;
}
public void setPersons(Set<Person> persons) {
this.persons = persons;
} }

hbm.xml:

<hibernate-mapping package="cn.model">
<class name="Department" table="DEPARTMENT">
<id name="id" column="ID">
<generator class="native"></generator>
</id>
<property name="name" column="NAME" type="java.lang.String" />
<set name="persons">
<key column="DEPT_ID" />
<one-to-many class="Person" />
</set>
</class>
</hibernate-mapping>

在Department实体中有一个Set<> 集合用来存储该部门下的所有员工,在hbm.xml 可以使用Set实现映射关系,one-to-many中需要指定Set中存储的对象来自哪个实体;并且通过Key中的列名来进行关连映射操作。

添加数据:

public void save(){
Session session=null;
Transaction tran=null;
try{
Department dept=new Department();
dept.setName("IT开发部"); Person person1=new Person();
person1.setName("汤姆克路斯");
person1.setDept(dept); Person person2=new Person();
person2.setName("大为史密斯");
person2.setDept(dept); // 或者(结果一样,但是Hibenate的处理流程完全不一样)
//Person person1=new Person();
//person1.setDept(dept);
//Person person2=new Person();
//person2.setName("大为史密斯");
//Set<Person> sets=new HashSet();
//sets.add(person1);
//sets.add(person2);
//Department dept=new Department();
//dept.setName("IT开发部");
//dept.setPersons(sets); session=HibernateSessionFactory.getSession();
tran=session.beginTransaction();
session.save(dept);
session.save(person1);
session.save(person2);
tran.commit();
}catch(Exception e){
if(session!=null){
session.close();
}
}
}

获取部门:

public Department getDepartmentById(Serializable id){
Session session=null;
try{
session=HibernateSessionFactory.getSession();
Department dept=(Department)session.get(Department.class, id);
//关于延迟加载(lazy)和强制加载(Hibernate.initialize(Object proxy) ) 等
//在配置文件里面可以用lazy=true,在程序里面可以用强制加载的方法Hibernate.initialize(Object proxy) 方法强制加载这样就相当于动态改变为lazy=false。
Hibernate.initialize(dept.getPersons());
return dept;
}catch(Exception e){
if(session!=null){
session.close();
}
}
return null;
}

测试:

@Test
public void testDeptList(){
Demo demo=new Demo();
Department dept=demo.getDepartmentById(1);
System.out.println("部门:"+dept.getName());
System.out.println("员工有:");
for(Person per : dept.getPersons()){
System.out.println(per.getName());
}
}

结果 :

Hibernate 多表关联映射- 一对多关系映射(one-to-many)的更多相关文章

  1. 菜鸟学习Hibernate——一对多关系映射

    Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创 ...

  2. hibernate实体xml一对多关系映射

    单向一对多关系映射: 一个房间对应多个使用者,也就是Room實例知道User實例的存在,而User實例則沒有意識到Room實例. 用户表: package onlyfun.caterpillar; p ...

  3. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  4. ORM映射(对象关系映射)

    ORM映射(对象关系映射)分创建表和操作表两个部分创建单表创建关联表(foreignKey) 一对一 一对多(重点) 多对多(重点) 创建表后加str方法把打印的地址转换成对应字符表的操作(增删改查) ...

  5. 【mybatis xml】数据层框架应用--Mybatis(三)关系映射之一对一关系映射

    实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系. 针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好的处理对象与对象之间的关联关 ...

  6. 0050 MyBatis关联映射--一对多关系

    一对多关系更加常见,比如用户和订单,一个用户可以有多个订单 DROP TABLE IF EXISTS customer; /*用户表*/ CREATE TABLE customer( `pk` INT ...

  7. hibernate课程 初探单表映射1-9 创建关系映射文件

    创建关系映射文件:(把实体类映射成一个表) 1 右键src==>new==>other==>hibernate==>hbm.xml==>Student==>Fini ...

  8. Hibernate制图(两)——许多-于─关系映射

    上篇学习了Hibernate的基本映射,也就是单表映射,非常easy就能理解,可是对于关系数据库来说,表之间存在关系是比不可少的.关系数据库中存在的关系是通过主外键建立起来的.反应到Hibernate ...

  9. Hibernate各种基本注解及一对一(多)关系映射采坑笔记

    hibernate提供两种方式配置关系映射,一种XMl配置,一种注解.SpringBoot已经自带了hibernate注解方式,我也是特别喜欢使用注解,特此记下常用的知识点. 1.基本注解 @Tabl ...

随机推荐

  1. NFC通信的模式选择

    原帖请参照:http://www.nfcchina.org/forum.php?mod=viewthread&tid=68&extra=page%3D1 1.nfc 怎么选择操作模式的 ...

  2. Java application 性能分析分享

    性能分析的主要方式 监视:监视是一种用来查看应用程序运行时行为的一般方法.通常会有多个视图(View)分别实时地显示 CPU 使用情况.内存使用情况.线程状态以及其他一些有用的信息,以便用户能很快地发 ...

  3. cf467A George and Accommodation

    A. George and Accommodation time limit per test 1 second memory limit per test 256 megabytes input s ...

  4. Android SDK目录结构和工具介绍

    Android SDK目录结构和工具介绍是本文要介绍的内容,主要是来了解并学习Android SDK的内容,具体关于Android SDK内容的详解来看本文. AD: Android SDK目录结构和 ...

  5. Django学习笔记(三)—— 型号 model

    疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...

  6. css 中文字体 unicode 对照表

    css 中文字体可以用 unicode 格式来表示,比如“宋体”可以用 \5B8B\4F53 来表示.具体参考下表: 中文名 英文名 unicode 宋体 SimSun \5B8B\4F53 黑体 S ...

  7. LeetCode Day4——Factorial Trailing Zeroes

    /* * Problem 172: Factorial Trailing Zeroes * Given an integer n, return the number of trailing zero ...

  8. 调用Response.Redirect 捕获异常 解决办法(摘抄)

    如果使用 Response.End.Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbortException 异常.您可以使用 try-catch ...

  9. jQuery的主要用法

    一.选择网页元素jQuery的基本设计和主要用法,就是"选择某个网页元素,然后对其进行某种操作".这是它区别于其他函数库的根本特点. 使用jQuery的第一步,往往就是将一个选择表 ...

  10. java工厂类与反射机制

    java 简单工厂类 2012-04-22 15:44:07|  分类: java |  标签:java工厂类  简单工厂类  |举报|字号 订阅     简单工厂模式需要由以下角色组成: 接口    ...