`

7.Hibernate的一对多关联映射

阅读更多

核心代码:

<set name="students">
	<key column="classesId"/>
	<one-to-many class="Students"/>
</set>
 

 

hihernate一对多关联映射(单向Classes----->Student)

一对多关联映射利用了多对一关联映射原理

多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一
一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多

也就是说一对多和多对一的映射策略是一样的,只是站的角度不同

在一端维护关系的缺点:
    * 如果将t_student表里的classesid字段设置为非空,则无法保存
    * 因为不是在student这一端维护关系,所以student不知道是哪个班的,
      所以需要发出多余的update语句来更新关系

 

一:实体类:

package com.tao.hibernate.one2many;

import java.util.Set;

public class Classes {
	private Integer id;
	private String name;
	private Set<Students> students;

	public Classes() {
		super();
	}

	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<Students> getStudents() {
		return students;
	}

	public void setStudents(Set<Students> students) {
		this.students = students;
	}

}
 
package com.tao.hibernate.one2many;

public class Students {
	private Integer id;
	private String name;
	private Classes classes;

	public Students() {
		super();
	}

	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 Classes getClasses() {
		return classes;
	}

	public void setClasses(Classes classes) {
		this.classes = classes;
	}

}
 

二:映射文件:

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

<hibernate-mapping package="com.tao.hibernate.one2many">
	<class name="Classes" table="t_classes">
		<id name="id" column="id" type="integer">
			<generator class="native" />
		</id>
		<property name="name" column="name" />
		<set name="students">
			<key column="classId"/>
			<one-to-many class="Students"/>
		</set>
	</class>
</hibernate-mapping>

 

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

<hibernate-mapping package="com.tao.hibernate.one2many">
	<class name="Students" table="t_students">
		<id name="id" column="id" type="integer">
			<generator class="native" />
		</id>
		<property name="name" column="name" />
	</class>
</hibernate-mapping>
  

三:测试类:

package com.tao.hibernate.one2many;

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

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import com.tao.hibernate.HibernateUtils;

public class TestMain {
	Session session = HibernateUtils.getFactory().openSession();

	@Test
	public void testSave() {
		Students s1 = new Students();
		s1.setName("tao");

		Students s2 = new Students();
		s2.setName("war");

		Classes c = new Classes();
		c.setName("148班");
		Set<Students> students = new HashSet<Students>();
		students.add(s1);
		students.add(s2);
		c.setStudents(students);

		Transaction ts = session.beginTransaction();
		ts.begin();
		session.save(s1);
		session.save(s2);
		session.save(c);
		ts.commit();
	}

	@Test
	public void testLoad() {
		Session session = HibernateUtils.getFactory().openSession();
		Classes c = (Classes) session.load(Classes.class, 1);
		for (Iterator<Students> iter = c.getStudents().iterator(); iter
				.hasNext();) {
			System.out.println(iter.next().getName());
		}
	}

}
分享到:
评论

相关推荐

    hibernate多对多关联映射

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...

    hibernate一对多关联映射(单向关联)

    这篇博客文章“hibernate一对多关联映射(单向关联)”将深入讲解如何配置和使用这种映射关系。 在单向关联中,只有一个实体知道另一个实体的存在,也就是说,只有父实体("一"的一端)有对子实体("多"的一端)的...

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

    hibernate多对多关联映射(单项关联)

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系模型,它用于处理两个实体类之间存在多个对应关系的情况。这篇博客"hibernate多对多关联映射(单项关联)"深入探讨了如何在Hibernate中实现这种映射...

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    Hibernate一对多关联映射(注解)

    本篇主要探讨的是Hibernate中的一对多关联映射,它允许一个实体对象对应数据库表中的多个行。在实际业务场景中,这种映射模式非常常见,例如一个用户可以拥有多个订单,一个部门可以包含多个员工等。 首先,我们来...

    hibernate一对多关联映射

    一、Hibernate一对多关联映射 1.1 单向关联:在单向一对多关联中,一个实体类知道另一个实体类,而另一个实体类并不知情。这通常通过在一方添加一个集合属性来实现,该集合包含另一方的实例。例如,`Department`类...

    hibernate一对多关联映射(双向关联)

    在Java的持久化框架Hibernate中,一对多关联映射是一种常见的关系映射方式,它用于表示一个实体(如用户)可以拥有多个子实体(如订单)的情况。在本篇文章中,我们将深入探讨如何实现双向关联的一对多映射,以及在...

    Hibernate关联映射

    9. Hibernate 一对一外键双向关联、主键双向关联、连接表双向关联、一对多外键双向关联、一对多连接表双向关联、多对多双向关联: 这些关联方式与单向关联类似,区别在于两个实体类都知道彼此的关联。在双向关联中...

    hibernate 单向多对多关联映射练习

    本练习主要关注的是Hibernate中的单向多对多关联映射,这是一种常见的关系数据库设计模式,用于表示两个实体间复杂的关系。 在多对多关联中,两个实体类可以相互拥有多个实例,但只在一个方向上建立关联。例如,...

    hibernate双向一对多关联映射(注解版)

    在Java的持久化框架Hibernate中,双向一对多关联映射是一种常见的关系映射方式,它模拟了数据库中的外键关联,使得一个实体可以拥有多个另一个实体的实例。在这个注解版的实现中,我们将深入探讨如何使用Hibernate的...

    Hibernate一对一主键关联映射(双向关联)

    标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...

    Hibernate3.x关联映射示例

    **Hibernate 3.x 关联映射详解** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者能够用面向对象的方式处理数据。Hibernate 3.x 版本是其成熟且广泛使用的版本,提供...

    Hibernate映射一对多关联关系

    ### Hibernate映射一对多关联关系 #### 知识点概览 - **概念解析**:一对多(One-to-Many)关联关系的概念及其在Hibernate中的实现方式。 - **域模型设计**:创建具有一个实体与多个实体关联的域模型。 - **关系...

    hibernate一对多关联映射学习小结

    Hibernate一对多关联映射学习小结 Hibernate是一种流行的Java持久层框架,它提供了强大的对象关系映射(ORM)功能,能够将Java对象与关系数据库中表之间建立映射关系。Hibernate的关联映射是其核心功能之一,可以将...

    hibernate关联映射实例

    1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,比如一个用户可以有多个订单。在Hibernate中,我们通过`@OneToMany`注解来实现这种关系。这个注解通常放在拥有众多子项的一方,配置`...

    Hibernate单向一对多关联映射(XML版)

    在本主题"Hibernate单向一对多关联映射(XML版)"中,我们将深入探讨如何使用XML配置来实现数据库中一个实体类对应多个实体类的关联关系。 在Hibernate中,一对多关联是一种常见的关系映射类型,它反映了数据库中的...

    Spring+Hibernate一对多关联映射---部门与员工表的级联添加

    本教程将深入探讨Spring和Hibernate结合使用时的一对多关联映射,特别是部门与员工表的级联添加。 在数据库设计中,一对多关联是一个常见的关系类型,例如一个部门可以有多名员工,但每个员工只能属于一个部门。在...

    hibernate多对一关联映射

    **标题:Hibernate多对一关联映射** 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者以面向对象的方式处理数据库操作。"多对一"关联映射是Hibernate中的一种常见关系类型,用于表示实体...

Global site tag (gtag.js) - Google Analytics