zoukankan      html  css  js  c++  java
  • hibernate.cfg.xml配置文件对关联关系的书写技巧!

    以Department(部门类)和User(用户类)作为例子:
    类图如下:
    一般hibernate.cfg.xml的配置文件开头都是如下:
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC
     3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     5 <hibernate-mapping package="cn.czk.oa.domain">
     6     <class name="Department" table="department">
     7         <id name="id" column="id">
     8         <generator class="native"/>
     9     </id>
    10     <!--.... 其它内容 .... -->
    11     </class>
    12 </hibernate-mapping>
     
    只需要改变一下package=""包名,类名和对应的表名。
    写完这些后,就可以准备写其它的普通属性和有关联关系的属性。
    首先第一步:
    • 一、先写其它的普通属性。(如:type是基本数据类型的)
              如下面例子:
    1 <hibernate-mapping package="cn.czk.oa.domain">
    2     <class name="Department" table="department">
    3         <id name="id" column="id">
    4             <generator class="native"/>
    5         </id>
    6         <property name="name" column="name" type="string">    </property>
    7         <property name="description" column="description" type="string"></property>
    8     </class>
    9 </hibernate-mapping>        

     

    • 二、 然后准备写有关联关系的属性的配置注释。
    如:
    在department.cfg.xml配置Department跟User的关联关系,还有自己的自关联的关系,那么先写出如下格式的注释:
    [“什么”属性,本类与“什么类”的“什么关系”]
    然后写出相应的关系模版,关于模板如下:
    1. 多对一的模板:
      <many-to-one name="1" class="2" column="3"></many-to-one>
    2. 一对多的模板:
      1 <set name="1">
      2     <key column="2"></key>
      3     <one-to-many class="3"/>
      4 </set>
    3. 多对多的模版:
      1 <set name="" table="">
      2     <key column=""></key>
      3     <many-to-many class="" column=""></many-to-many>
      4 </set>
    4.  一对一的模版:
      1 <one-to-one name="" class=""></one-to-one>
       
    本例子:写出注释:
     1 <!-- users属性,本类与User类的一对多关系 (一) -->
     2 <set name="">
     3     <key column=""></key>
     4     <one-to-many class=""/>
     5 </set>
     6 <!-- parent属性,本类与Department(上级)的多对一的关系 (二)-->
     7 <many-to-one name="" class="" column=""></many-to-one>
     8 <!-- childrens属性,本类与Department(下级)的一对多的关系 (三)-->
     9 <set name="">
    10     <key column=""></key>
    11     <one-to-many class=""/>
    12 </set>

     

    • 三、最后填空
        [“什么”属性,本类与“什么类”的“什么关系”]    
    根据上面注释模板来对配置进行填空。
    填写name属性:其中不管什么关联关系的name属性都对应着第一个“什么”。
    填写class属性: 不管什么关联关系的class属性都对应着第二个“什么”。
    填写column属性:
     1 如果是一对一的话,没有这个属性,所以不考虑。(因为一对一默认的就是双方的id)
     2 如果是一对多或多对一的话,就要找到属于它们的双向关联.
     3 (比如本例子的parent属性和childrens属性就是一对双向的关联关系.)
     4 那么该如何写它们的column属性呢?
     5 首先,我们可以根据表结构来理解,因为column代表的是表的字段.
     6 我们可以拿一对多来入手讲解,在一对多的关联关系中,只有一个外键,而且该外键是放在"多方"的,
     7 那么我们就可以知道,其实在一对多的关联关系中<key column=""></key> 的key代表是"多方"的外键,
     8 所以,我们可以给column填入"name的值+‘Id’后缀"
     9 如本例中的column="parentId".(然后在把一对多的column值复制到多对一中的column中)
    10 如果是多对多的关联关系的话,比其它关联关系多了一个table属性和column属性,
    11 其中table这个属性就是中间表的名称,一般是把两张表的名称结合在一起,而且关联双方的table属性要一致.不然的话就会创建出两个不同的中间表了.
    12 其中<many-to-many colum="" class="">的column属性就是跟它的class名称+id后缀.
    13 如:<many-to-many colum="userId" class="User"></many-to-many>
    14 其中还有个column,也就是<key column=""></key>中的column.这个column直接用本类的名称+id后缀.
    15 如:
    16 <class name="Role" table="role">
    17     <!-- ... 其它略 ... -->
    18     <!-- users属性,本类与User类的多对多关系 -->
    19     <set name="users" table="user_Role">
    20         <key column="roleId"></key>
    21         <many-to-many column="userId" class="User"></many-to-many>
    22     </set>
    23 </class>

     

     
                    
                    
     
     
     
     
  • 相关阅读:
    团队冲刺第一阶段第三天
    团队冲刺第一阶段第二天
    团队冲刺第一阶段第一天
    学习进度07
    学习进度06
    结对编程之子数组最大的和(由于一直登不上我的账号,在规定日期内只在我搭档的博客上交了)
    小学四则运算网页版
    团队介绍
    学习进度条05
    111
  • 原文地址:https://www.cnblogs.com/JamKong/p/4555530.html
Copyright © 2011-2022 走看看