`
p_3er
  • 浏览: 58203 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

第九章 关系映射 多对多关联映射

 
阅读更多

表设计:

有一张中间表,中间表中有两张关联表的外键

如:studentteacher


Student:

package cn.framelife.mvc.entity;

import java.util.Set;

public class Student {
	private Integer id;
	private String name;
	private Set<Teacher> teachers;

	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<Teacher> getTeachers() {
		return teachers;
	}

	public void setTeachers(Set<Teacher> teachers) {
		this.teachers = teachers;
	}
}


Teacher:

package cn.framelife.mvc.entity;

import java.util.Set;

public class Teacher {
	private Integer id;
	private String name;
	private Set<Student> students;

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

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

}


Student.hbm.xml:

<hibernate-mapping>
    <class name="cn.framelife.hibernate.entity.Student" table="student">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="s_name" length="45" not-null="true" />
        </property>
        <set name="teachers" table="s_t" cascade="all">
        	<key column="student_id"/>
        	<many-to-many column="teacher_id" class="cn.framelife.hibernate.entity.Teacher"></many-to-many>
        </set>
    </class>
</hibernate-mapping>


Teacher.hbm.xml:

<hibernate-mapping>
    <class name="cn.framelife.hibernate.entity.Teacher" table="teacher" catalog="hibernate">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="t_name" length="45" not-null="true" />
        </property>
        <set name="students" table="s_t" >
        	<key column="teacher_id"/>
        	<many-to-many column="student_id" class="cn.framelife.hibernate.entity.Student"></many-to-many>
        </set>
    </class>
</hibernate-mapping>


增加:

Student s1 = new Student();
			s1.setName("s10");
			Student s2 = new Student();
			s2.setName("s11");
			
			Set<Teacher> set = new HashSet<Teacher>();
			Teacher t1 = new Teacher();
			t1.setName("t10");
			Teacher t2 = new Teacher();
			t2.setName("t11");
			set.add(t1);
			set.add(t2);
			
			//设置学生与老师的的关系
			s1.setTeachers(set);
			s2.setTeachers(set);
			
			//增加两个学生,同时会把老师也加到数据库中
			session.save(s1);
			session.save(s2);




分享到:
评论

相关推荐

    Hibernate关联关系映射目录

    在多对一连接表单向关联中,多个实体(子实体)与一个实体(父实体)相关联,这种关联通过第三个表(连接表或关联表)来实现。 **表结构示例**: - **Department表**: - `departmentid`: 主键 - `departmentName`...

    第9章Mybatis映射篇之结果映射

    Mybatis还支持关联映射,如一对多、多对一的关系映射。例如,如果`User`类还有一对多的`Address`关系,可以使用`&lt;collection&gt;`标签: ```xml &lt;!-- ... --&gt; &lt;!-- ... --&gt; ``` 此外,Mybatis提供了自动...

    hibernate多对多双向关联

    "hibernate_many2many_2"这个文件名可能是指一个关于Hibernate多对多关联的示例或教程的第二部分,可能包含配置文件、Java实体类、映射文件以及相关的测试代码。 **详细知识点:** 1. **实体类定义**:在Hibernate...

    hibernate一对多,多对一,一对多双向关联

    在数据库设计中,这种关联关系是常见的,例如一个用户可以有多个订单(一对多),一个订单对应一个用户(多对一),而一个商品可以被多个订单购买,同时一个订单也可以包含多个商品(一对多双向关联)。这个标题暗示...

    按键映射3.1随意映射键盘按键

    9. **扩展功能**:除了基础的按键映射,高级软件还可能提供热键设置、宏录制、多配置文件切换等功能,以满足不同用户的需求。 10. **备份与恢复**:保存并定期备份映射配置至关重要,这样在系统重装或软件升级后,...

    Hibernate ORM - 一对多双向组合关联关系

    9. **缓存机制**:理解Hibernate的第一级缓存(Session缓存)和第二级缓存(可选,如EHCache),它们如何影响一对多关联的读写操作。 10. **性能考虑**:在设计一对多双向组合关联时,要考虑到查询效率、内存消耗等...

    asp.net 数据映射方案

    3. **实体类(Entities)**:阐述了如何定义表示数据库表的实体类,以及如何定义它们之间的关系,如一对一、一对多、多对多。 4. **查询(Linq to Entities)**:展示了如何使用Linq(Language Integrated Query)...

    计算机网络谢希仁第八版第九章无线网络和移动网络复习题

    通过谢希仁编著的《计算机网络》第八版第九章内容,我们可以了解无线网络和移动网络的基本概念、技术和相关标准。 首先,无线局域网(WLAN)可以根据是否有固定基础设施分为两大类:有固定基础设施的和无固定基础...

    内蒙古师范大学附属中学高中数学2.1.1第2课时映射同步练习含解析新人教B版必修1

    题目中指出,映射可能是多对一的关系,即B中的元素可以对应A中的多个元素,但A中的每个元素在B中必须有且仅有一个象。 4. **映射的表示与计算**:映射可以通过函数关系式来表示,如题目中的f:x→x²或者f:x→x+y...

    精通Java Web整合开发(第2版)

    12.4.9 多对多双向关联的annotation注解实现545 12.4.10 组成关系映射的annotation注解实现547 12.4.11 继承关系映射的annotation注解实现549 12.4.12 hibernate集合映射的annotation注解实现552 12.5 基于...

    离散数学-集合论,共9章,比较全面

    映射的性质,如一对一、一对多、多对一和多对多映射,以及逆映射、复合映射的概念都会被详细解释。 第三章“关系”涵盖了关系的定义、性质和分类,如自反性、对称性、传递性和反传递性。此外,关系的闭包、关系的度...

    CsGL 纹理映射

    【CsGL纹理映射】是基于C#编程语言利用CsGL库实现OpenGL图形库中的纹理映射技术。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D矢量图形,而CsGL是.NET框架下的一个OpenGL封装库,使得C#开发者也能方便地...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     15.3 映射双向多对多关联关系  15.3.1 关联两端使用元素  15.3.2 在inverse端使用元素  15.3.3 使用组件类集合  15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     15.3 映射双向多对多关联关系  15.3.1 关联两端使用元素  15.3.2 在inverse端使用元素  15.3.3 使用组件类集合  15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     15.3 映射双向多对多关联关系  15.3.1 关联两端使用元素  15.3.2 在inverse端使用元素  15.3.3 使用组件类集合  15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     15.3 映射双向多对多关联关系  15.3.1 关联两端使用元素  15.3.2 在inverse端使用元素  15.3.3 使用组件类集合  15.3.4 把多对多关联分解为两个一对多关联  15.4 小结  15.5 思考题 第16章 Hibernate的检索...

    NHibernate中文文档

    集合映射如one-to-many、many-to-many以及value collections可以实现多对一和多对多的关系,延迟加载(lazy initialization)能提高性能,sorted collections和bidirectional associations则是管理关联关系的重要...

    hibernate_reference中文文档.pdf

    - **7.5.1 一对多 (one to many)/多对一 (many to one)**:说明使用连接表的双向一对多/多对一关联映射。 - **7.5.2 一对一 (one to one)**:介绍使用连接表的双向一对一关联映射。 - **7.5.3 多对多 (many-to-...

    Oracle数据库Sql语句详解大全

    第一章 SELECT查询 写一条SELECT查询语句 在查询中使用表达式、运算符 对空值的处理 ...第九章 对数据的操作 在已创建表中插入新的数据 修改已经存在的数据 删除表中的数据 理解事物控制及其重要性 等等......

Global site tag (gtag.js) - Google Analytics