zoukankan      html  css  js  c++  java
  • Hibernate 关联映射

     关联映射:
        1.关于n:1  使用emp和dept进行举例
         单项多对一:
         emp:
         entity:+private Dept dept;
         hbm.xml:+<many-to-one name="dept" column="deptno" class="com.entity.Dept" cascade="save-update" />
         dept无需修改
        
         双向一对多:
         emp:
         entity:+private Dept dept;
         hbm.xml:+<many-to-one name="dept" column="deptno" class="com.entity.Dept" cascade="save-update" />
         dept:
         entity:+private List<Emp> emps;
         hbm.xml:+<bag name="emps" inverse="true" cascade="all">
                     <key>
                         <column name="DEPTNO" precision="2" scale="0" />
                     </key>
                     <one-to-many class="com.entity.Emp" />
                 </bag>
         关于inverse和cascade的设置
         inverse:反转  默认inverse="false"表示主动方  一般将多方设置为主动方
         cascade:级联  none save-update delete all 一般对一方设置级联
        2.多对多:使用Student表和Course表  中间需要一个StuCourse学生课程表
         单向多对多:
         Student:
         entity:+private List<Course> courses = new ArrayList<Course>();
         hbm.xml:
         <bag name="courses" table="STUCOURSE" inverse="false" cascade="save-update">
                    <key>
                        <column name="STUNO" precision="4" scale="0" />
                    </key>
                    <many-to-many class="com.manytomany.entity.Course" >
                     <column name="COURSEID" precision="4" scale="0" />
                    </many-to-many>
                 </bag>
         Course:无需修改
         注意事项:关系表中只保存两列外键,设置inverse="false",在设置级联时需要设置cascade="save-update"
         双向多对多:
         Student:
         entity:+private List<Course> courses = new ArrayList<Course>();
         hbm.xml:
         <bag name="courses" table="STUCOURSE" inverse="false" cascade="save-update">
                    <key>
                        <column name="STUNO" precision="4" scale="0" />
                    </key>
                    <many-to-many class="com.manytomany.entity.Course" >
                     <column name="COURSEID" precision="4" scale="0" />
                    </many-to-many>
                 </bag>
         Course:
         entity:+private List<Student> students = new ArrayList<Student>();
         hbm.xml:
         <bag name="students" table="STUCOURSE" inverse="false" cascade="save-update">
                    <key>
                        <column name="COURSEID" precision="4" scale="0" />
                    </key>
                    <many-to-many class="com.manytomany02.entity.Student" >
                     <column name="STUNO" precision="4" scale="0" />
                    </many-to-many>
                </bag>
         注意事项:关系表中只保存两列外键,设置inverse="false",在设置级联时需要设置cascade="save-update"
        3.一对一:Employee员工表和Passport员工信息表
     主键关联:
         Employee:
         entity:+private Passport passport;
         hbm.xml:
         <one-to-one name="passport"  class="com.entity.Passport" cascade="all" />
         Passport:
         entity:+private Employee employee;
         hbm.xml:
         <generator class="foreign" >
         <param name="property">employee</param>
         </generator>
         <one-to-one name="employee" class="com.entity.Employee" />
         注意事项:主键生成策略选择foreign
         唯一外键:
         Employee:
         entity:+private Passport passport;
         hbm.xml:
         <one-to-one name="passport" class="com.entity.Passport" property-ref="employee"  cascade="all" />
         Passport:
         entity:+private Employee employee;
         hbm.xml:
         <many-to-one name="employee" column="empno" class="com.entity.Employee" unique="true">
  • 相关阅读:
    将 20M 文件从 30 秒压缩到 1 秒,我是如何做到的?
    Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor
    HTTP返回状态码及错误大全
    network ifconfig
    linux lsof
    thrift types
    thrift concepts
    network uds(Unix domain socket)
    kernel 自定义coredump文件名及位置
    word 段内与段间换行
  • 原文地址:https://www.cnblogs.com/QQW-HH/p/7642912.html
Copyright © 2011-2022 走看看