示例:一个老师(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 (?, ?)
相关推荐
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...
在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系映射是一种常见的数据库交互模式,它用于表示两个实体之间复杂的关系。在这个场景中,一个实体可以与多个其他实体相关联,反之亦然。例如,在学生和课程...
包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而提高开发效率。本主题聚焦于"hibernate单向多对多映射",特别是在XML配置文件中的实现。在这...
Hibernate对象关系映射一对多 很基础等文档
综上所述,这个压缩包提供了关于Hibernate关系映射的全面教程,包括多对多、一对一和一对多的关系配置,以及如何在Spring+Hibernate+Struts环境中应用这些关系。对于想要深入理解Hibernate并提升开发效率的Java...
Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,消除了直接编写 SQL 的需要。在 Hibernate 中,映射关系是将数据库表与 Java 类之间的关联方式,使得对象模型可以与关系...
在Java的持久化框架中,Hibernate是一个非常重要的工具,它为开发者提供了强大的对象关系映射(ORM)功能,使得在Java应用中操作数据库变得更加简单。本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而简化了数据访问层的编程。在这个“hibernate双向多对多关联映射(注解版)”的主题中,我们将...
**标题:“Hibernate关系映射”** 在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为面向对象的方式,极大地简化了数据持久化的复杂性。"多对一"关系映射是Hibernate...
在Java的持久化框架Hibernate中,多对多映射是一种常见的关系映射方式,用于处理两个实体类之间一对多或多对一的关系。在这个例子中,我们看到的是`Team`(团队)与`Member`(成员)之间的多对多关系,通过`Map`数据...
在本章中,我们将深入探讨Hibernate中的关联映射,包括一对多、多对一以及多对多的关系。这些映射关系对于理解如何在Java应用程序中有效地管理数据库对象至关重要。 首先,我们来解决描述中提到的问题。`...
总的来说,这篇博客和相关代码示例为开发者提供了一个理解和实现Hibernate中多对多单向关联的起点,帮助他们更好地处理复杂的数据库关系映射。学习和实践这部分内容对于提升Java后端开发能力,特别是使用Hibernate...
本篇文章将深入探讨Hibernate中的一对多和多对多关系映射。 首先,让我们理解一对多关联映射。在数据库中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。在Hibernate中,这可以通过在实体类中...
在Java持久化领域,Hibernate是一个非常重要的框架,它简化了对象关系映射(ORM)的过程,使得Java开发者能够更方便地操作数据库。本教程将详细讲解如何使用Hibernate来实现MySQL数据库中的一对多和多对一的映射关系...
关系映射主要包括一对一、一对多、多对一和多对多四种关系。 2. **配置文件**:在Hibernate中,`hibernate.cfg.xml`是核心配置文件,它包含了数据库连接信息、实体类映射等设置。在案例三中,我们需要关注这个文件...
在IT行业中,数据库管理和对象关系映射(ORM)框架是至关重要的部分,特别是对于Java开发者而言,Hibernate是一个广泛使用的ORM工具。本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合...