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