hibernate映射之多对多单向
数据模型:
表teacher
表student
表t_tea_stu
实体对象模型:
Teacher private int tid; private String tname; private Set<Student> students;
Student private int sid; private String sname;
xml文件配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.skyedu.bean"> <class name="Teacher" table="teacher"> <id name="tid" column="tid" > <generator class="native"></generator> </id> <property name="tname" column="tname" length="30"></property> <set name="students" table="t_tea_stu" cascade="save-update"> <key column="tid"></key> <many-to-many class="Student" column="sid" ></many-to-many> </set> </class> </hibernate-mapping>
附录解释:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.skyedu.bean"> <class name="Student" table="student"> <id name="sid" column="sid" > <generator class="native"></generator> </id> <property name="sname" column="sname" length="32" ></property> </class> </hibernate-mapping>
测试代码:
@Test public void testSave(){ Session session = HibernateUtil.getSession(); Transaction transaction = session.beginTransaction(); try{ Student student1 = new Student(); student1.setSname("张三1"); Student student2 = new Student(); student2.setSname("张三2"); Student student3 = new Student(); student3.setSname("张三3"); Student student4 = new Student(); student4.setSname("张三4"); Student student5 = new Student(); student5.setSname("张三5"); Teacher teacher1 = new Teacher(); teacher1.setTname("王五1"); Set<Student> students1 = new HashSet<Student>(); students1.add(student1); students1.add(student2); students1.add(student3); teacher1.setStudents(students1); Teacher teacher2 = new Teacher(); teacher2.setTname("王五2"); Set<Student> students2 = new HashSet<Student>(); students2.add(student4); students2.add(student5); teacher2.setStudents(students2); session.save(teacher1); session.save(teacher2); transaction.commit(); }catch(Exception e){ transaction.rollback(); }finally{ HibernateUtil.closeSession(session); } } @Test public void testFind(){ Session session = HibernateUtil.getSession(); Teacher teacher = (Teacher) session.get(Teacher.class, 1); System.out.println(teacher.getTname()); for(Student student:teacher.getStudents()){ System.out.println("--"+student.getSname()); } }