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

前端之家收集整理的这篇文章主要介绍了【hibernate框架】多对多双向关联(XML实现)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
多对多的双向关联:(非常少用)
通过老师可以知道他教了多少学生,这是单项多对多。而如果同时通过学生知道有多少个老师教他,那么就是多对多双向的关联。


XML实现:
Student.java:
  1. package cn.edu.hpu.many2many;
  2.  
  3.  
  4. import java.util.HashSet;
  5. import java.util.Set;
  6.  
  7.  
  8. public class Student {
  9. private int id;
  10. private String name;
  11. private Set<Teacher> teachers=new HashSet<Teacher>();
  12. public Set<Teacher> getTeachers() {
  13. return teachers;
  14. }
  15. public void setTeachers(Set<Teacher> teachers) {
  16. this.teachers = teachers;
  17. }
  18.  
  19.  
  20. public int getId() {
  21. return id;
  22. }
  23. public void setId(int id) {
  24. this.id = id;
  25. }
  26. public String getName() {
  27. return name;
  28. }
  29. public void setName(String name) {
  30. this.name = name;
  31. }
  32. }


Teacher.java:
  1. package cn.edu.hpu.many2many;
  2.  
  3.  
  4. import java.util.HashSet;
  5. import java.util.Set;
  6.  
  7.  
  8. import cn.edu.hpu.many2many.Student;
  9.  
  10.  
  11. public class Teacher {
  12. private int id;
  13. private String name;
  14. private Set<Student> students=new HashSet<Student>();
  15. //选择set的原因是因为,set互相之间不会有重复的
  16. //跟数据库模型比较匹配
  17.  
  18.  
  19. public int getId() {
  20. return id;
  21. }
  22. public void setId(int id) {
  23. this.id = id;
  24. }
  25. public String getName() {
  26. return name;
  27. }
  28. public void setName(String name) {
  29. this.name = name;
  30. }
  31. public Set<Student> getStudents() {
  32. return students;
  33. }
  34. public void setStudents(Set<Student> students) {
  35. this.students = students;
  36. }
  37. }


配置文件
Student.hbm.xml:
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5.  
  6.  
  7. <hibernate-mapping package="cn.edu.hpu.many2many">
  8. <class name="Student" table="xm_student" dynamic-update="true">
  9. <!-- 主键 这里的主键名字刚好也是'id'-->
  10. <id name="id" column="id">
  11. <generator class="native"></generator>
  12. </id>
  13. <property name="name"></property>
  14. <set name="teachers" table="t_s">
  15. <key column="student_id"></key><!-- 指定关联字段的名字叫什么 -->
  16. <many-to-many class="cn.edu.hpu.many2many.Teacher" column="teacher_id"/>
  17. </set>
  18. </class>
  19. </hibernate-mapping>

Teacher.hbm.xml:
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5.  
  6.  
  7. <hibernate-mapping package="cn.edu.hpu.many2many">
  8. <class name="Teacher" table="xm_teacher" dynamic-update="true">
  9. <!-- 主键 这里的主键名字刚好也是'id'-->
  10. <id name="id" column="id">
  11. <generator class="native"></generator>
  12. </id>
  13. <property name="name"></property>
  14. <set name="students" table="t_s">
  15. <key column="teacher_id"></key><!-- 指定关联字段的名字叫什么 -->
  16. <many-to-many class="cn.edu.hpu.many2many.Student" column="student_id"/>
  17. </set>
  18. </class>
  19. </hibernate-mapping>

在hibernate.cfg.xml中配置:
  1. <mapping resource="cn/edu/hpu/many2many/Student.hbm.xml"/>
  2. <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,
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

猜你在找的XML相关文章