总结Hibernate的多对多关联的4个特点

总结Hibernate的多对多关联的4个特点:

以学生和课程多对多的例子说明,实体类部分代码:

public class Course {

    private Integer cid;

    private String cname;

   

    private Set<Student> stuSet;

//getter setter......

}

 

public class Student {

 

    private Integer id;

    private String name;

    private Date birthday;

   

    private Set<Course> courseSet;

//getter setter......

}


1. 两个实体类,三个表,第三个表不需要实体类。

 

2. 查询的时候,不需要查询中间表,通过查询另外两个实体类中的一个,调用getter方法,都可以得到中间表的数据

Student stu = service.findById(studentVo.getId());

Set set = stu.getCourseSet();

 

3. 保存和修改、删除的时候,也不需要操作中间表,操作两个实体类中的一个,就可以向中间表保存或修改或删除数据。

因为有inverse属性,默认为false。

 

public void save(Student stu,String[] cids) {

            session = HibernateUtil.getSession();

            tx = session.beginTransaction();

            Set set = new HashSet();

            for(String cid:cids){

                Course course = new Course();

                course.setCid(Integer.parseInt(cid));

                set.add(course);

            }

            stu.setCourseSets(set);

            session.saveOrUpdate(stu);

//其他事务代码

}

 

4. 有一个表只有两个字段,构成联合主键,分别指向另两个表的主键,它没有自己的独立的自动递增主键。(映射文件里的set标签或bag标签里面的子元素的两个column是第三个表的两个字段)。

 

上面第4个特点,是判断是否多对多关系的重要标准。

 

另外,多对多的模型,可以通过两个多对一实现,所以多对多的概念,一定要分清。例如用户和角色是多对多,但是实现方式可以是两个多对一,也可以是多对多。区分的办法就是通过表的字段。

如果用多对多实现,那么映射文件里set或者bag元素后面配一个table="中间表"。

posted @ 2016-04-25 00:42  songbaoguang  阅读(505)  评论(0)    收藏  举报