示例:一个老师(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 对象关系映射总结hibernate 对象关系映射总结hibernate 对象关系映射总结
hibernate(多对多关系映射)实现存储,内附sql脚本和详细的注释,适合初学者
Hibernate映射解析 七种映射关系
包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。
Hibernate对象关系映射一对多 很基础等文档
Hibernate 多表映射关系配置 如,一对一 多对一 多对多等
Hibernate 关联关系映射分类
hibernate关联映射详解SSH 多对多,一对多关系对象映射
hibernate的多种映射关系
很有用的hibernate映射关系,适用于spring+hibernate+strust框架
简单的Hibernate的N对N关系的映射,这里主要的只是谈到了关于如何映射一对一,多对一,多对多的单向和双向映射。 当然,其实所谓的单双向映射最终还是要表现在select时的作用,但是这一部分并未介绍。 我想,要想搞...
Hibernate4中映射关系图解。
用Hibernate映射继承关系
1:Hibernate的关联映射,存在一对多和多对一映射,多对多映射: 1.1:一对多和多对一映射,举例说明: 学生和老师: 一个老师可以教多个学生 【一对多映射】 多个学生可以被一个老师教【多对一映射】 部门与员工: ...
熟悉Hibernate的“多对一”关系映射,并应用于web系统中
hibernate 映射关系学习入门 一对一映射Eclipse源码
Hibernate_关联关系映射配置详解,希望能帮助广大java爱好者
Hibernate_关联关系映射配置