【OA】——hibernate映射关系编写技巧
来源:互联网 发布:dnf 登陆器源码 编辑:程序博客网 时间:2024/05/17 17:45
引言
之前对于hibernate中几种关系映射的编写甚是头疼啊,在这个项目中学习了一个比较好用的技巧,小编在此总结和分享,从而可以更好的加深自己对这个几种关系映射的印象。
西面以这三个实体的关系为例进行总结:
下面先看一下几个实体的映射文件的内容:
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的值。比如下面的例子
下面在介绍多对多的编写规则,因为这种关系需要中间表,也就是模板中的table的值,这个值我选用的规则是:项目名称_实体1的name_实体2的name ,比如user与role的关系中间表名称为:itcast_user_role。对于name和calss的填写规则还是按照上面的规则来填写。
关于column的填写规则是将本实体的名称+Id,放在自己的映射文件的<key column=""></key>这个column的位置上,并且复制到对方的<many-to-many class="" column=""></many-to-many>这个位置一份。这两个值必须一样。举个例子
小结
上面就是小编对于编写hibernate映射文件中几种关系的小技巧,可能在语言描述上面有一些不清楚,但是大家可以结合这其中的例子来进行描述。欢迎大家有什么更好的编写技巧来共勉!
- 【OA】——hibernate映射关系编写技巧
- Hibernate实体关系映射技巧
- 对象/关系映射—Hibernate
- hibernate 映射关系—总纲
- 【Hibernate】—对象关系映射
- hibernate关系映射——关联映射
- hibernate关系映射——继承映射
- Hibernate关系映射——组件映射
- hibernate映射关系——继承映射
- hibernate 映射关系—基本映射
- hibernate 映射关系—集合映射
- Hibernate关系映射——单向N-1关系映射
- Hibernate关系映射——单向1-1关系映射
- Hibernate对象关系映射——映射继承关系
- hibernate 映射关系—关系映射(一对多)
- hibernate 映射关系—关系映射(一对一)
- hibernate的映射文件编写技巧一则
- Hibernate 关系映射 ——单向一对一
- Bootstrap 网格系统
- Tinker热修复学习笔记
- 团战可以输、提莫必须死
- bgsave出错原因分析
- JavaScript基础
- 【OA】——hibernate映射关系编写技巧
- java 处理人民日报98年语料库处理复合标注词
- No write since last change (add ! to override)
- 利用jackson在json~bean~list之间的转换
- Struts框架(二)——对象
- TCP/IP三次我手四次挥手过程与对应状态转移图
- ZOJ - 2477 dfs [kuangbin带你飞]专题二
- Android 内核--Context对象
- Linux学习笔记