【OA】——hibernate映射关系编写技巧

简介: 【OA】——hibernate映射关系编写技巧

引言


之前对于hibernate中几种关系映射的编写甚是头疼啊,在这个项目中学习了一个比较好用的技巧,小编在此总结和分享,从而可以更好的加深自己对这个几种关系映射的印象。

 

西面以这三个实体的关系为例进行总结:


20170216192144400.png



下面先看一下几个实体的映射文件的内容:

 

Department.hbm.xml


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.oa.domain">
  <class name="Department" table="itcast_department">
    <id name="id">
      <generator class="native" />
    </id>
    <property name="name" />
    <property name="description" />
    <!-- users属性,本类与User类 的 一对多 的关系 -->
    <set name="users">
      <key column="departmentId"></key>
      <one-to-many class="User" />
    </set>
    <!-- parent属性,本类与Department(上级)的 多对一 的关系 -->
    <many-to-one name="parent" class="Department" column="parentId"></many-to-one>
    <!-- children属性,本类与 Department(下级) 的 一对多的关系 -->
    <set name="children" cascade="delete" order-by="id ASC">
      <key column="parentId"></key>
      <one-to-many class="Department" />
    </set>
  </class>
</hibernate-mapping>


User.hbm.xml


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.oa.domain">
  <class name="User" table="itcast_user">
    <id name="id">
      <generator class="native" />
    </id>
    <property name="loginName" />
    <property name="password" />
    <property name="name" />
    <property name="gender" />
    <property name="phoneNumber" />
    <property name="email" />
    <property name="description" />
    <!-- department属性,本类与Department类的 多对一 的关系 -->
    <many-to-one name="department" class="Department" column="departmentId"></many-to-one>
    <!-- roles属性,本类与Role类的 多对多 的关系 -->
    <set name="roles" table="itcast_user_role" lazy="false" >
      <key column="userId"></key>
      <many-to-many class="Role" column="roleId"></many-to-many>
    </set>
  </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.oa.domain">
  <class name="Role" table="itcast_role">
    <id name="id">
      <generator class="native" />
    </id>
    <property name="name" />
    <property name="description" />
    <!-- users属性,本类与User类的 多对多的 关系 -->
    <set name="users" table="itcast_user_role">
      <key column="roleId"></key>
      <many-to-many class="User" column="userId"></many-to-many>
    </set>
    <!-- privileges属性,本类与Privilege类的 多对多的关系 -->
    <set name="privileges" table="itcast_role_privilege" lazy="false">
      <key column="roleId"></key>
      <many-to-many class="Privilege" column="privilegeId"></many-to-many>
    </set>
  </class>
</hibernate-mapping>


先给出几种关系编写模型

  多对一:
    <many-to-one name="" class="" column=""></many-to-one>
  一对多(Set):
    <set name="">
      <key column=""></key>
      <one-to-many class=""/>
    </set>
  多对多(Set):
    <set name="" table="">
      <key column=""></key>
      <many-to-many class="" column=""></many-to-many>
    </set>

 第一、写注释(有规则)以department中的uers属性为例

       <!-- users属性,本类与User的一对多 -->
           格式:?属性,本类与?的?
               ?1 属性名
               ?2 关联的类型
               ?3 关系


这样大家在看看上面映射文件中几种关系的说明都是这样的格式

 

第二、将对应的空的类型模板复制到对应的注释下面

 

第三步、填空

 

将注释(注释要按照要求来写)中

 

xxx属性中的xxx当做name的值。

 

本类与yyy类中的yyy当做class的值

 

下面是填充column的规则,分为两组 一对多与多对一是一组,多对多是一组。


多对一与一对多,这种不需要中间表,将“一”的一方的实体的名称首字母小写然后后面加上Id,将这个值分别作为这一组的column的值。比如下面的例子

20170216194239155.png








目录
相关文章
|
存储 SQL Java
hibernate学习笔记之二(映射关系与懒加载)
hibernate学习笔记之二(映射关系与懒加载)
hibernate学习笔记之二(映射关系与懒加载)
|
SQL Oracle Java
hibernate(四) 双向多对多映射关系
现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感觉还是比较容易的,需要理清楚其数据库关系图,那么你就拿下了它。映射文件的配置还是那么些死东西。
184 0
|
缓存 NoSQL Java
hibernate(三) 一对多映射关系
前面两节讲了hibernate的两个配置文件和hello world!。还有hibernate的一级缓存和三种状态,基本上hibernate就懂一点了,从这章起开始一个很重要的知识点,hibernate的关系映射。一对一、一对多、多对多的讲解。,希望你们能从中学到东西,我也从中巩固自己的知识
183 0
|
Java 数据库连接 数据库
hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系
  前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hibernate还提供了注解方式配置映射文件,非常灵活,减少了配置文件的冗余,虽然维护起来相对比较麻烦,但是的确很方便开发.
1123 0
|
Java 数据库连接 数据格式
hibernate笔记--单(双)向的多对多映射关系
  在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我们我们的需求是能通过角色获取到其所拥有的操作权限,这就构成了单项的多对多的映射关系,为了管理这个...
1068 0
|
XML Java 数据库连接
hibernate笔记--继承映射关系的三种实现方式
单表继承映射(一张表):   假设我们现在有三个类,关系如下:             Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映射来建表,最后生成的表是这样的:   可以看到我们只需要建立...
1090 0
|
SQL Java 数据库连接
hibernate笔记--基于外键的单(双)向的一对一映射关系
  假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射关系,只需要在单向多对一的映射关系的多的一端的配置文件的标签中添加一个unique="true"...
879 0
|
Java 数据库连接
hibernate笔记--基于主键的单(双)向的一对一映射关系
  上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这个外键列,而与idCard表共用一个主键,或者说是其外键为主键的表结构,这种基于主键的双向一对一...
921 0