【hibernate框架】多对多双向关联(XML实现)

多对多的双向关联:(非常少用)
通过老师可以知道他教了多少学生,这是单项多对多。而如果同时通过学生知道有多少个老师教他,那么就是多对多双向的关联。

XML实现:
Student.java:

package cn.edu.hpu.many2many;

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

public class Student {
	private int id;
	private String name;
	private Set<Teacher> teachers=new HashSet<Teacher>();

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

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

}

Teacher.java:

package cn.edu.hpu.many2many;

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

import cn.edu.hpu.many2many.Student;

public class Teacher {
	private int id;
	private String name;
	private Set<Student> students=new HashSet<Student>();
	//选择set的原因是因为,set互相之间不会有重复的
	//跟数据库模型比较匹配

	public int getId() {
		return id;
	}
	public void setId(int 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:

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

<hibernate-mapping package="cn.edu.hpu.many2many">
    <class name="Student" table="xm_student" dynamic-update="true">
    	<!-- 主键 这里的主键名字刚好也是'id'-->
			<id name="id" column="id">
			    <generator class="native"></generator>
			</id>  

        <property name="name"></property>
        <set name="teachers" table="t_s">
           <key column="student_id"></key><!-- 指定关联字段的名字叫什么 -->
           <many-to-many class="cn.edu.hpu.many2many.Teacher" column="teacher_id"/>
        </set>
    </class>
</hibernate-mapping>

Teacher.hbm.xml:

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

<hibernate-mapping package="cn.edu.hpu.many2many">
    <class name="Teacher" table="xm_teacher" dynamic-update="true">
    	<!-- 主键 这里的主键名字刚好也是'id'-->
			<id name="id" column="id">
			    <generator class="native"></generator>
			</id>  

        <property name="name"></property>
        <set name="students" table="t_s">
           <key column="teacher_id"></key><!-- 指定关联字段的名字叫什么 -->
           <many-to-many class="cn.edu.hpu.many2many.Student" column="student_id"/>
        </set>
    </class>
</hibernate-mapping>

在hibernate.cfg.xml中配置:

<mapping resource="cn/edu/hpu/many2many/Student.hbm.xml"/>
<mapping resource="cn/edu/hpu/many2many/Teacher.hbm.xml"/>

生成的sql语句:
 create table t_s (
        student_id integer not null,
        teacher_id integer not null,
        primary key (teacher_id, student_id)
    )

    create table xm_student (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )

    create table xm_teacher (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )

    alter table t_s 
        add index FK1BF687B5893C2 (teacher_id), 
        add constraint FK1BF687B5893C2 
        foreign key (teacher_id) 
        references xm_teacher (id)

    alter table t_s 
        add index FK1BF686ABD4922 (student_id), 
        add constraint FK1BF686ABD4922 
        foreign key (student_id) 

        references xm_student (id)

转载请注明出处:http://blog.csdn.net/acmman

时间: 2024-11-10 14:03:09

【hibernate框架】多对多双向关联(XML实现)的相关文章

java中Hibernate多对多双向关联的配置

 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任  Hibernate的双向多对多关联有两种配置方法:那我们就来看看两种方案是如何配置的.          一.创建以各自类为类型的集合来关联       1.首先我们要在两个实体类(雇员<Emploee>.工程<Project>)中各自给对方添

Hibernate从入门到精通(十一)多对多双向关联映射

上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我 们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一下相关类图和代码,具体如下: public class Role { private int id; private String name; private Set users; public int getId() { return id; } public void setId(int id

Hibernate框架学习之四:关联映射那些事

前言 Hibernate关联关系与客观世界中具体的映射关系很类似,在进行数据库设计的时候常常需要考虑是一对多.多对一等类似的映射关系,这其中涉及数据库设计方面的知识.映射关系可以分为单向与双向两种,具体又包括一对多.多对一.一对一以及多对多四种.所以总共有八种映射关系.这里只介绍了XML配置文件的版本. 下面的配置文件的配置方式都以下面的两个持久化类作为模板: public class Person { private int id; private String name; private i

【hibernate框架】多对一单向关联(XML实现)

一个组有多个用户,一个用户只能属于一个组. 使用XML来实现多对一单项关联 Group.java: package cn.edu.hpu.many2one; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; public class Group { private int id;

【hibernate框架】一对一双向外键关联(XML实现)

以Student与StuIDCard一对一双向关联为例,说一下用XML实现两者的一对一双向关联. 学生与学生证之间的关联关系. Student.java: package cn.edu.hpu.model; public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id

Java的Hibernate框架中的双向主键关联与双向外键关联_java

一.双向主键关联双向的主键关联其实是单向一对一主键关联的一种特殊情况,只不过要在关联对象的两端的映射文件中都要进行<one-to-one>的配置,另外还要在主映射的主键一端采用foreign外键关联属性. 这里同样使用Person和IdCard来讨论,一个人对应着一个唯一的身份证,而且一个身份证也唯一映射着一个人,所以这就产生了双向的关联关系,Person的主键同样也是IdCard的主键,分别是主键的同时也是外键,这种关联关系成为双向一对一映射,表现到关系模型中可如下图: 图中的两个表采用了主

【hibernate框架】一对一双向外键关联(Annotation实现)

一对一双向外键关联(Annotation方法): 一夫(Husband)一妻(Wife)的一对一双向外键关联 Husband和Wife实体类: package cn.edu.hpu.one2one; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import jav

hibernate5(11)注解映射[3]一对多多对一双向关联

在上两篇文章里,我们详细地分别讲解了一对多和多对一的单向关联配置的具体属性含义,在这一篇文章里,我们完成两者的的整合建立双向关联. 在实际的博客网站中,我们可能需要根据文章读取作者(用户)信息,但肯定也要让用户能获取自己的文章信息,针对这种需求,我们可以建立文章(多)对用户(一)的双向关联映射. 下面先看实例映射配置文件: /********************一方配置User********************/ @Entity//声明当前类为hibernate映射到数据库中的实体类

【SSH系列】Hibernate映射-- 多对一单向关联映射

      在hibernate中非常重要的就是映射,在前面的博文中,小编简单的介绍了基本映射,基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用.这个比较简单,但是基础知识还是需要好好掌握的哦,还有一些关联映射,比如user && group,她们之间的关系是一对多,我们知道一个用户只能属于一个组,但是一个组可以包好N多个用户,所以他们之间的关系就是多对一的关系,接着我们来看他们的对象模型以及关系模式.