`
周一Monday
  • 浏览: 346777 次
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate4多对多关系映射

阅读更多

示例:一个老师(Teacher)有多个学生(Student),一个学生有多个老师。

public class Teacher {

	private Integer id;
	private String name;

	private Set<Student> students = new HashSet<Student>();

	// getter and setter
}	

 

public class Student {

	private Integer id;
	private String name;
	
	private Set<Teacher> teachers = new HashSet<Teacher>();

	// getter and setter
}

 用XML映射

<hibernate-mapping package="org.monday.hibernate4.domain">
	<class name="Teacher" table="tbl_teacher">
		<id name="id">
			<generator class="identity" />
		</id>
		<property name="name" />
		<set name="students" table="tbl_student_teacher">
			<key column="teacher_id" />
			<many-to-many class="Student" column="student_id" />
		</set>
	</class>
</hibernate-mapping>

 

<hibernate-mapping package="org.monday.hibernate4.domain">
	<class name="Student" table="tbl_student">
		<id name="id">
			<generator class="identity" />
		</id>
		<property name="name" />
		<set name="teachers" table="tbl_student_teacher" inverse="true">
			<key column="student_id" />
			<many-to-many class="Teacher" column="teacher_id" />
		</set>
	</class>
</hibernate-mapping>

 

 用@Annotation映射

@Entity
@Table(name = "tbl_teacher")
public class Teacher {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	private String name;

	@ManyToMany
	@JoinTable(name = "tbl_student_teacher", joinColumns = @JoinColumn(name = "teacher_id"), inverseJoinColumns = @JoinColumn(name = "student_id"))
	private Set<Student> students = new HashSet<Student>();

	// getter and setter
}

 

@Entity
@Table(name = "tbl_student")
public class Student {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	private String name;

	@ManyToMany(mappedBy = "students")
	private Set<Teacher> teachers = new HashSet<Teacher>();

	// getter and setter
}

 @ManyToMany中增加mappedBy属性的实体将不再控制关联关系 

 

测试代码

Student s = new Student();
s.setName("terry");

Teacher t = new Teacher();
t.setName("mary");

t.getStudents().add(s);
s.getTeachers().add(t);

session.save(t);
session.save(s);

 

 SQL schema

Hibernate: 
    create table tbl_student (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
Hibernate: 
    create table tbl_student_teacher (
        teacher_id integer not null,
        student_id integer not null,
        primary key (teacher_id, student_id)
    )
Hibernate: 
    create table tbl_teacher (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
Hibernate: 
    alter table tbl_student_teacher 
        add index FK2BB635DB556D6E8 (teacher_id), 
        add constraint FK2BB635DB556D6E8 
        foreign key (teacher_id) 
        references tbl_teacher (id)
Hibernate: 
    alter table tbl_student_teacher 
        add index FK2BB635DA4BB8C48 (student_id), 
        add constraint FK2BB635DA4BB8C48 
        foreign key (student_id) 
        references tbl_student (id)
Hibernate: 
    insert 
    into
        tbl_teacher
        (name) 
    values
        (?)
Hibernate: 
    insert 
    into
        tbl_student
        (name) 
    values
        (?)
Hibernate: 
    insert 
    into
        tbl_student_teacher
        (teacher_id, student_id) 
    values
        (?, ?)
分享到:
评论
2 楼 jason_haojie 2015-08-06  
真心简单是啊吧
1 楼 jason_haojie 2015-08-06  
            

相关推荐

    hibernate 映射关系学习入门 多对多实体映射

    本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...

    hibernate多对多关联映射

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

    hibernate(多对多关系映射)

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系映射是一种常见的数据库交互模式,它用于表示两个实体之间复杂的关系。在这个场景中,一个实体可以与多个其他实体相关联,反之亦然。例如,在学生和课程...

    hibernate关联映射详解

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

    hibernate单向多对多映射(XML版)

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而提高开发效率。本主题聚焦于"hibernate单向多对多映射",特别是在XML配置文件中的实现。在这...

    Hibernate对象关系映射

    Hibernate对象关系映射一对多 很基础等文档

    hibernate关系映射多对多关系

    综上所述,这个压缩包提供了关于Hibernate关系映射的全面教程,包括多对多、一对一和一对多的关系配置,以及如何在Spring+Hibernate+Struts环境中应用这些关系。对于想要深入理解Hibernate并提升开发效率的Java...

    hibernate的多种映射关系

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,消除了直接编写 SQL 的需要。在 Hibernate 中,映射关系是将数据库表与 Java 类之间的关联方式,使得对象模型可以与关系...

    hibernate(一对多,多对一映射)操作

    在Java的持久化框架中,Hibernate是一个非常重要的工具,它为开发者提供了强大的对象关系映射(ORM)功能,使得在Java应用中操作数据库变得更加简单。本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一...

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

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而简化了数据访问层的编程。在这个“hibernate双向多对多关联映射(注解版)”的主题中,我们将...

    Hibernate关系映射

    **标题:“Hibernate关系映射”** 在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为面向对象的方式,极大地简化了数据持久化的复杂性。"多对一"关系映射是Hibernate...

    Hibernate使用 Map实现多对多映射

    在Java的持久化框架Hibernate中,多对多映射是一种常见的关系映射方式,用于处理两个实体类之间一对多或多对一的关系。在这个例子中,我们看到的是`Team`(团队)与`Member`(成员)之间的多对多关系,通过`Map`数据...

    hibernate核心,一对多,多对多映射讲解,看了就完全搞明白了

    在本章中,我们将深入探讨Hibernate中的关联映射,包括一对多、多对一以及多对多的关系。这些映射关系对于理解如何在Java应用程序中有效地管理数据库对象至关重要。 首先,我们来解决描述中提到的问题。`...

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

    总的来说,这篇博客和相关代码示例为开发者提供了一个理解和实现Hibernate中多对多单向关联的起点,帮助他们更好地处理复杂的数据库关系映射。学习和实践这部分内容对于提升Java后端开发能力,特别是使用Hibernate...

    hibernate关联映射详解SSH 多对多,一对多关系对象映射

    本篇文章将深入探讨Hibernate中的一对多和多对多关系映射。 首先,让我们理解一对多关联映射。在数据库中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。在Hibernate中,这可以通过在实体类中...

    hibernate 一对多多对一的映射

    在Java持久化领域,Hibernate是一个非常重要的框架,它简化了对象关系映射(ORM)的过程,使得Java开发者能够更方便地操作数据库。本教程将详细讲解如何使用Hibernate来实现MySQL数据库中的一对多和多对一的映射关系...

    Hibernate教程20_关系映射案例三

    关系映射主要包括一对一、一对多、多对一和多对多四种关系。 2. **配置文件**:在Hibernate中,`hibernate.cfg.xml`是核心配置文件,它包含了数据库连接信息、实体类映射等设置。在案例三中,我们需要关注这个文件...

    Hibernate集合映射与关联关系

    在IT行业中,数据库管理和对象关系映射(ORM)框架是至关重要的部分,特别是对于Java开发者而言,Hibernate是一个广泛使用的ORM工具。本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合...

Global site tag (gtag.js) - Google Analytics