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

  引言

  之前对于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映射文件中几种关系的小技巧,可能在语言描述上面有一些不清楚,但是大家可以结合这其中的例子来进行描述。欢迎大家有什么更好的编写技巧来共勉!     

     

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

g-Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值