以Department(部门类)和User(用户类)作为例子:
类图如下:
一般hibernate.cfg.xml的配置文件开头都是如下:
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.czk.oa.domain">
<class name="Department" table="department">
<id name="id" column="id">
<generator class="native"/>
</id>
<!--.... 其它内容 .... -->
</class>
</hibernate-mapping>
 
只需要改变一下package=""包名,类名和对应的表名。
写完这些后,就可以准备写其它的普通属性和有关联关系的属性。
首先第一步:
  • 一、先写其它的普通属性。(如:type是基本数据类型的)
          如下面例子:
 <hibernate-mapping package="cn.czk.oa.domain">
<class name="Department" table="department">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" column="name" type="string"> </property>
<property name="description" column="description" type="string"></property>
</class>
</hibernate-mapping>
  • 二、 然后准备写有关联关系的属性的配置注释。
如:
在department.cfg.xml配置Department跟User的关联关系,还有自己的自关联的关系,那么先写出如下格式的注释:
[“什么”属性,本类与“什么类”的“什么关系”]
然后写出相应的关系模版,关于模板如下:
  1. 多对一的模板:

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

最新文章

  1. 精通Web Analytics 2.0 (10) 第八章:竞争情报分析
  2. 1Z0-053 争议题目解析687
  3. MongoDB之TextSearch简介
  4. [Java] java.util.Arrays 中使用的 sort 采用的算法 (转)
  5. Android中Service的使用
  6. Python新手学习基础之数据结构-序列1
  7. CSS 之 margin知识点
  8. Java和C#中String直接赋值与使用new创建(==与equals进行比较)的区别
  9. 笔记之《用python写网络爬虫》
  10. Prime Ring Problem
  11. C语言使用指针变量指向字符串,对字符串进行处理后再将指针移向开头为什么不能输出?(使用Dev-c++进行编译)
  12. [LeetCode] Single Element in a Sorted Array 有序数组中的单独元素
  13. JDK的安装以及配置
  14. Linux命令学习总结之rmdir命令的相关资料可以参考下
  15. 运行Tomcat报错 解决方法
  16. hive_连续天次计算
  17. 14.翻译系列:从已经存在的数据库中生成上下文类和实体类【EF 6 Code-First系列】
  18. Exception 06 : org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session :
  19. innodb_locks_unsafe_for_binlog分析
  20. 关于rowid的函数

热门文章

  1. Mysql入门的10条语句
  2. vmware中linux虚拟机使用NAT模式不能连接外网解决
  3. 【bzoj4994】[Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组
  4. P2507 [SCOI2008]配对
  5. [洛谷P1501][国家集训队]Tree II
  6. GYM - 101147 F.Bishops Alliance
  7. JZOJ 5279 香港记者
  8. Codeforces Round #516 (Div. 2)D. Labyrinth
  9. linux--lsof
  10. 自己写的enum转换的一个扩展,