Hibernate多对多

多对多其实特别好理解

就是多个对应对个

举个例子

图书以及图书的分类  图书里能够找到很多分类  分类里能够找到很多图书

 2、实体类和映射配置

    Student持久化类和Student.hbm.xml

//Student实体类
public class Student {
    private Integer sid;
    private String sname;
    //用set集合来保存选的多个课程
    private Set<Course> courseSet = new HashSet<Course>();

  set、get.....  

//Student.hbm.xml
    <class name="domain.Student" table="student">
        <id name="sid" column="sid">
            <!-- 主键生成策略 -->
            <generator class="increment"></generator>
        </id>
        <!-- 一些常规属性 -->
        <property name="sname"></property>

<!-- 关键的地方就在这里了。一定要搞清楚两个column分别指的是什么意思 脑袋中要有哪个数据库关系图-->

<!--要查询到所有的course,就需要通过连接表,所以申明连接表的名称-->
    <set name="courseSet" table="student_course">
    <!-- 本实体类在连接表中的外键名称,过程我们上面分析的很清楚了,为什么需要这个呢?让hibernate知道连接表中有一个外键名为s_id的指向本实体类 -->
        <key column="s_id"></key>
        <!-- 多对多映射关系,映射类和其映射类在连接表中的外键名称 这个的意思跟上面的一样,也是声明让hibernate知道,这样一来,hibernate就知道如何查询了-->
        <many-to-many class="domain.Course" column="c_id"></many-to-many>
    </set>
    </class>

Course和Course.hbm.xml

//Course实体类
public class Course {
    private int cid;
    private String cname;
    private Set<Student> studentSet = new HashSet<Student>();
  ...  

//Course.hbm.xml 有了上面的分析,这个就简单了,内容和意义跟上面的一模一样。
    <class name="domain.Course" table="course">
        <id name="cid" column="cid">
            <!-- 主键生成策略 -->
            <generator class="increment"></generator>
        </id>
        <!-- 一些常规属性 -->
        <property name="cname"></property>
        <set name="studentSet" table="student_course">
            <!-- 本类在连接表中外键的名称, -->
            <key column="c_id"></key>
      <!--多对多映射关系,映射类和其映射类在连接表中的外键名称-->
            <many-to-many class="domain.Student" column="s_id"></many-to-many>
        </set>
    </class>

3、测试类

  Course course = new Course();
        course.setCname("化学");
        
        Student student = new Student();
        student.setSname("qqq");

        course.getStudentSet().add(student);
//        student.getCourseSet().add(course);
        
        
        session.save(course);
        session.save(student);

按照自己想法来理解就好啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值