Hibernate中映射文件理解

来源:互联网 发布:日军第四师团 知乎 编辑:程序博客网 时间:2024/06/16 22:14

   1)不管是一般的集合,还是一对多、多对多关系,都要使用到set,区别只是前者set中为一般类型,后者为对象。

        具体写法:

       一般类型

      <set name="addressSet" table="user_address_set">          <key column="userId"/>          <element type="string" column="address"/>      </set>
     一对多映射

         <set name="employees" table="t_employees">            <key column="departmentId"/>            <one-to-many class="cn.com.cpf.pojo.Employee"/>         </set>
      <many-to-one name="department" class="cn.com.cpf.pojo.Department" column="departmentId"></many-to-one>
       多对多映射

  <set name="students" table="teacher_student" inverse="true">        <key column="teacherId"/>        <many-to-many class="cn.com.cpf.pojo.Student" column="studentId"/>  </set>
  <set name="teachers" table="teacher_student">        <key column="studentId"/>        <many-to-many class="cn.com.cpf.pojo.Teacher" column="teacherId"/>  </set>
        说明:

       1>所有的key指的都是中间表中映射本表主键的那个列

       2>所有的name指的都是本类中的属性名称

       3>如果set中元素为一般类型,那么set中使用element元素,指定类型和对应的中间表的列

       4>如果set中元素为类,那么set中根据情况使用one-to-many或many-to-many,使用class指定类型

   2) inverse属性

        1> 在一对多关系中,inverse表示是否自己来设置多的那张表中的外键值

        2> 在多对多关系中,inverse表示是否自己来往中间表中插入数据

        3> inverse讨论的只是外键的操作,cascade讨论的是关联对象操作时候的关系

   3) 单向关系

         单向一对多

         单向多对一

         单向多对多

         一对一

        对于单向关系,只能从维护外键的那一方进行解除关系和删除操作

   4) 操作总结

        1> 保存

             不管何种关联关系,有没有关系,都直接save即可

            注意:建议先保存没有外键的一方,这样就可以先生成id,那么有外键的一方保存的时候就可以直接保存,而不用update了

       2 > 解除关联关系

            实质也就是设置关联的另一方为null

           注意:只有维护关联关系,且不是主键关联的才能解除

       3> 删除对象

           从维护关系的一方删除肯定不会有问题,因为外键就在这里,直接删即可

           从没有外键的一方删除会有问题,因为已经被另一方引用了主键

0 0
原创粉丝点击