标签:
在hibernate中表间的关系维护是最重要的,而这又与cascade和inverse是分不开的。
  表结构:
学生和课程是多对多的关系,通过第三张表来映射来者间的关系。
  类结构:
下面来保存一些数据:
@Test
	public void save() {
		Session session = factory.openSession();
		session.getTransaction().begin();
		
		Course course = new Course();
		course.setCname("数学");
		Course course1 = new Course();
		course1.setCname("语文");
		
		Student stu =  new Student();
		stu.setSname("张三");
		Student stu1 =  new Student();
		stu1.setSname("李四");
		//在代码中是course维护两者间的关系,因此需要将对应的映射文件中的inverse设为false,如果设置为true,则会导致第三张表为空
		course.getStu().add(stu);
		course.getStu().add(stu1);
//因为是course建立关系,所以在代码中是保存course,但是将对应的映射文件中的cascade设置为all,因此在保存course的同时也会保存student,如果不做此设置则会报错,因为学生类不会保存
//如果是course建立关系,而代码中保存student是不会保存course的,因为级联是两者建立关系才会起作用
		session.save(course);
		session.save(course1);
		
		session.getTransaction().commit();
		session.close();
	}
对应的映射文件如下:
  <set name="stu" table="course_stu" cascade="all" inverse="true">
        	<key>
        		<column name="cid"></column>
        	</key>
        	<many-to-many class="Student" column="sid"></many-to-many>
        </set>
【一对多中是多的一方维护关系,多对多中在页面现实的一方维护关系】
标签:
原文地址:http://www.cnblogs.com/Jc-zhu/p/4531819.html