心得6-hibernate级联之多对多单双向剖析
2012-12-22 10:34
295 查看
多对多: 学生与课程,以下主要从案例出发,由案例具体解析 单向多对多 Student.hbm.xml <?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="com.hbsi.many2many"> <class name="Student" table="student"> <id name="id"> <generator class="native"/> </id> <property name="name" column="name"/> <set name="course" table="student_course" cascade="save-update"> <key column="student_id"/> <many-to-many column="course_id" class="Course" /> </set> </class> </hibernate-mapping> Course.hbm.xml <?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="com.hbsi.many2many"> <class name="Course" table="course"> <id name="id"> <generator class="native"/> </id> <property name="name" column="name"/> </class> </hibernate-mapping> 测试类 package com.hbsi.many2many; import java.util.HashSet; import java.util.Set; import org.hibernate.Session; import org.junit.Test; import com.hbsi.utils.HibernateSessionFactory; public class TestApp { Session session = HibernateSessionFactory.getSession(); @Test public void add(){ session.beginTransaction(); Student student1 = new Student(); student1.setName("keven"); Student student2 = new Student(); student2.setName("jie"); Course course1 = new Course(); course1.setName("english"); Course course2 = new Course(); course2.setName("chinese"); Set<Course> courses = new HashSet<Course>(); courses.add(course1); courses.add(course2); student1.setCourse(courses); session.save(student1); session.save(student2); session.save(course1); session.save(course2); session.getTransaction().commit(); HibernateSessionFactory.closeSession(); } @Test public void find(){ Student student = (Student) session.get(Student.class,1); Set<Course> courses = student.getCourse(); for(Course course : courses){ System.out.println(student.getName()+"---"+course.getName()); } } } 双向多对多 Student.hbm.xml <?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="com.hbsi.many2manyboth"> <class name="Student" table="studentboth"> <id name="id"> <generator class="native"/> </id> <property name="name" column="name"/> <set name="course" table="student_courseboth" cascade="save-update"> <key column="student_id"/> <many-to-many column="course_id" class="Course" /> </set> </class> </hibernate-mapping> Course.hbm.xml <?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="com.hbsi.many2manyboth"> <class name="Course" table="courseboth"> <id name="id"> <generator class="native"/> </id> <property name="name" column="name"/> <set name="student" table="student_courseboth" cascade="save-update"> <key column="course_id"/> <many-to-many class="Student" column="student_id"/> </set> </class> </hibernate-mapping> 测试类 package com.hbsi.many2manyboth; import java.util.HashSet; import java.util.Set; import org.hibernate.Session; import org.junit.Test; import com.hbsi.utils.HibernateSessionFactory; public class TestApp { Session session = HibernateSessionFactory.getSession(); @Test public void add(){ session.beginTransaction(); Student student1 = new Student(); student1.setName("keven"); Student student2 = new Student(); student2.setName("jie"); Course course1 = new Course(); course1.setName("english"); Course course2 = new Course(); course2.setName("chinese"); /*达到的添加功能一样,可以从多方的任何一方添加 * Set<Course> courses = new HashSet<Course>(); courses.add(course1); courses.add(course2); student1.setCourse(courses); student2.setCourse(courses);*/ Set<Student> students = new HashSet<Student>(); students.add(student1); students.add(student2); course1.setStudent(students); course2.setStudent(students); session.save(student1); session.save(student2); session.save(course1); session.save(course2); session.getTransaction().commit(); HibernateSessionFactory.closeSession(); } @Test public void find(){ Student student = (Student) session.get(Student.class,1); Set<Course> courses = student.getCourse(); for(Course course : courses){ System.out.println(student.getName()+"---"+course.getName()); } Course course1 = (Course) session.get(Course.class,1); Set<Student> students = course1.getStudent(); for(Student student1 : students){ System.out.println(course1.getName()+"---"+student1.getName()); } } }
相关文章推荐
- 心得6-hibernate级联之多对多单双向剖析
- 心得5-hibernate级联之一对一单双向剖析
- 心得5-hibernate级联之一对一单双向剖析
- 心得4-hibernate入门4 级联之双向一对多与多对一
- 心得7-hibernate级联之多对多转换为多对一的问题剖析
- 心得7-hibernate级联之多对多转换为多对一的问题剖析
- 心得4-hibernate入门4 级联之双向一对多与多对一
- hibernate一对多双向级联删除
- Hibernate双向一对多级联添加
- Hibernate学习之级联操作2——一对多双向自身关联关系
- Hibernate初学者---多对多单/双向关联
- hibernate中双向关联在级联情况下save对象讨论
- hibernate 级联删除 双向一对多
- hibernate级联之多对多转换为多对一的问题剖析
- hibernate级联之多对多转换为多对一的问题剖析
- hibernate 双向一多对关联 删除一端时级联删除多端
- hibernate级联之多对多转换为多对一的问题剖析
- hibernate 双向一多对关联 删除一端时级联删除多端
- Hibernate关联映射之多对多单/双向关联映射
- Hibernate一对多双向级联操作