码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2016-04-25 06:25:28      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

总结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="中间表"。

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

标签:

原文地址:http://www.cnblogs.com/bobsong/p/5429085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!