学生类:
- package dao.po;
- import java.util.Set;
- /**
- * @author zl 学生类
- */
- public class Student
- {
- private int id;
- private String name;
- private Set<Teacher> teachers;
- }
老师类:
- package dao.po;
- import java.util.Set;
- /**
- * @author zl 老师类
- */
- public class Teacher
- {
- private int id;
- private String name;
- private Set<Student> students;
- }
伦理片 http://www.dotdy.com/
两个映射文件 :
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping
- package="dao.po">
- <class name="Student">
- <id name="id">
- <generator class="native"/>
- </id>
- <property name="name" not-null="true" length="255" column="`name`"/>
- <!-- name="teachers" 表示:Student类中有一个属性叫teachers (是Set集合)-->
- <!-- table="teacher_student" 表示:中间表表名叫teacher_student -->
- <set name="teachers" table="teacher_student">
- <!-- column="student_id" 表示:中间表teacher_student的字段-->
- <!-- Student类的id与中间表teacher_student的字段student_id对应-->
- <key column="student_id"/>
- <!-- column="teacher_id" 表示:中间表teacher_student的字段-->
- <!-- class="Teacher" 表示:中间表teacher_student的字段teacher_id与 Teacher类的id对应-->
- <many-to-many class="Teacher" column="teacher_id"/>
- </set>
- </class>
- </hibernate-mapping>
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping
- package="dao.po">
- <class name="Teacher">
- <id name="id">
- <generator class="native"/>
- </id>
- <property name="name" not-null="true" length="255" column="`name`"/>
- <set name="students" table="teacher_student">
- <key column="teacher_id"/>
- <many-to-many class="Student" column="student_id"/>
- </set>
- </class>
- </hibernate-mapping>
保存操作, 查询就不说了:
- package dao;
- import java.util.HashSet;
- import java.util.Set;
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import dao.po.Student;
- import dao.po.Teacher;
- public class Many2Many
- {
- /**
- * @param args
- */
- public static void main(final String[] args)
- {
- add();
- }
- /**
- * 添加几个老师与学生
- */
- public static void add()
- {
- final Teacher t1 = new Teacher();
- t1.setName("语文老师");
- final Teacher t2 = new Teacher();
- t2.setName("数学老师");
- final Student s1 = new Student();
- s1.setName("学生小明");
- final Student s2 = new Student();
- s2.setName("学生小红");
- // final Set<Teacher> set_t = new HashSet<Teacher>();
- // set_t.add(t1);
- // set_t.add(t2);
- final Set<Student> set_s = new HashSet<Student>();
- set_s.add(s1);
- set_s.add(s2);
- //给老师set 学生
- t1.setStudents(set_s); //建立关联,只在一方面建立关联就行了, 不可给学生set()了老师,再老师set()了学生
- t2.setStudents(set_s); //建立关联,只在一方面建立关联就行了, 不可给学生建了关联,再老师建关联
- //给学生set 老师
- //不可以再做
- Session session = null;
- try
- {
- session = HibernateUtil.getSeesion();
- final Transaction tx = session.beginTransaction();
- session.save(t1);
- session.save(t2);
- session.save(s1);
- session.save(s2);
- tx.commit();
- }
- finally
- {
- if (session != null)
- {
- session.close();
- }
- }
- }
- }
- // 中间表teacher_student 表结构如下 :
- //| teacher_student | CREATE TABLE `teacher_student` (
- // `teacher_id` int(11) NOT NULL,
- // `student_id` int(11) NOT NULL,
- // PRIMARY KEY (`student_id`,`teacher_id`),
- // KEY `FK2E2EF2DE4BF3A147` (`teacher_id`),
- // KEY `FK2E2EF2DE3B5856A7` (`student_id`),
- // CONSTRAINT `FK2E2EF2DE3B5856A7` FOREIGN KEY (`student_id`) REFERENCES `student
- //` (`id`),
- // CONSTRAINT `FK2E2EF2DE4BF3A147` FOREIGN KEY (`teacher_id`) REFERENCES `teacher
- //` (`id`)
- //) ENGINE=InnoDB DEFAULT CHARSET=utf8 |