心得6-hibernate级联之多对多单双向剖析
来源:互联网 发布:常见网络骗局有哪些 编辑:程序博客网 时间:2024/05/16 17:50
多对多: 学生与课程,以下主要从案例出发,由案例具体解析单向多对多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();@Testpublic 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();}@Testpublic 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();@Testpublic 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();}@Testpublic 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());}}}