标签:
在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