认真开完以后,就能很简单的写出各种关系了

第一步,写注释:

<!--xx属性,本类与Yy(类)的多对一 -->

<!--xx属性,本类与Yy(类)的一对多 -->

<!--xx属性,本类与Yy(类)的多对多 -->

<!--xx属性,本类与Yy(类)的一对一 -->

第二部,拷模版

<!--xx属性,本类与Yy(类)的多对一 -->

<many-to-one name="" class="" column=""></many-to-one>

<!--xx属性,本类与Yy(类)的一对多 -->

<set name="">

<key column=""></key>

<one-to-many class=""/>

</set>

<!--xx属性,本类与Yy(类)的多对多 -->

<set name="" table="">

<key column=""></key>

<many-to-many class="" column=""></many-to-many>

</set>

<!--xx属性,本类与Yy(类)的一对一 -->

<many-to-one name="" class="" column="" unique="true"></many-to-one>

第三步,填空:

<!--xx属性,本类与Yy(类)的多对一 -->

<many-to-one name="xx" class="Yy" column=""></many-to-one>

<!--xx属性,本类与Yy(类)的一对多 -->

<set name="xx">

<key column=""></key>

<one-to-many class="Yy"/>

</set>

<!--xx属性,本类与Yy(类)的多对多 -->

<set name="xx" table="">

<key column=""></key>

<many-to-many class="Yy" column=""></many-to-many>

</set>

<!--xx属性,本类与Yy(类)的一对一 -->

<many-to-one name="xx" class="Yy" column="" unique="true"></many-to-one>

说明:

多对一,一对多中的column的名字自己取,但是对应的两个关系的两个column必须一样;

一般在多的一方,把属性名+Id当成column值,一对多 一方也使用这个column,这样就可以了;

多对多中,tables 是多对多的中间表一般命名中包括两个表名。 key中的column值得是集合外键,指的是引用当前自己表的外键,本对象+Id。 many-to-many指的是引用对方的外键,一般关联对象名+Id;

下面我们给出一个例子:

实体类:

Role

/**
 * 实体:岗位
 * @author Jelly
 *
 */
public class Role implements Serializable{

	private Long id;
	private String name;
	private Set<User> users = new HashSet<User>();
}

hbn.xml

<hibernate-mapping package="com.hqu.oa.domain">
	<class name="Role" table="hqu_role">
		<id name="id">
			<generator class="native" />
		</id>
		<property name="name" />

		<!-- users属性,本类与User多对多关系 -->
		<set name="users" table="hqu_user_role" >
			<key column="roleId"></key>
			<many-to-many class="User" column="userId"></many-to-many>
		</set>
	</class>
</hibernate-mapping>

User:

/**
 * 实体:用户
 * @author Jelly
 *
 */
public class User implements Serializable{
	private Long id;
	private Department department;// 所属部门
	private Set<Role> roles = new HashSet<Role>();
}

User.hbm.xml

<hibernate-mapping package="com.hqu.oa.domain">
	<class name="User" table="hqu_user">
		<id name="id">
			<generator class="native" />
		</id>
		<!-- department属性,本类与Department的多对一关系 -->
		<many-to-one name="department" class="Department" column="departmentId"></many-to-one>

		<!-- roles属性,本类与Role的多对多关系 -->
		<set name="roles" table="hqu_user_role" order-by="roleId" lazy="false">
			<key column="userId"></key>
			<many-to-many class="Role" column="roleId"></many-to-many>
		</set>
	</class>
</hibernate-mapping>

Department

/**
 * 实体:部门
 * @author Jelly
 */
public class Department implements Serializable{
	private Long id;
	private Set<User> users = new HashSet<User>();
	private Department parent;
	private Set<Department> children = new HashSet<Department>();
}

Department.hbm.xml

<hibernate-mapping package="com.hqu.oa.domain">
	<class name="Department" table="hqu_department">
		<id name="id">
			<generator class="native" />
		</id>

		<!-- users属性,本类与User的一对多关系 -->
		<set name="users">
			<key column="departmentId"></key>
			<one-to-many class="User" />
		</set>

		<!-- parnet属性,本类与Department(上级)的多对一 -->
		<many-to-one name="parent" class="Department" column="parentId"></many-to-one>
		<!-- children属性,本类与Department(下级)的一对多关系 -->
		<set name="children" cascade="delete" order-by="id">
			<key column="parentId"></key>
			<one-to-many class="Department"/>
		</set>
	</class>
</hibernate-mapping>

Hibernate实体映射文件多对多等关系简单应用技巧的更多相关文章

  1. (转)Hibernate关联映射——对象的三种关系

    http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射——对象的三种关系 Hibernate框架基于ORM设 ...

  2. Hibernate---数据操作示例BY实体映射文件

    创建一个Student.java类:该类需要一个无参的构造函数,以及属性的get/set方法 public class Student implements Serializable { privat ...

  3. 使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同

    假设是使用oracle数据库.那么hibernate的映射文件.hbm.xml例如以下: <id name="xuehao" column="xuehao" ...

  4. Hibernate之深入Hibernate的映射文件

    这周周末 要把hibernate的映射文件搞定 .. 1.映射文件的主结构 主要结构  :根元素为<hibernate-mapping ></hibernate-mapping> ...

  5. Hibernate实体映射配置(XML)简单三步完美配置

    我们在使用Hibernate框架的时候,非常纠结的地方就是实体和表之间的映射,今天借助汤老师的思路写了小教程,以后配置不用纠结了! 第一步:写注释 格式为:?属性,表达的是本对象与?的?关系. 例:“ ...

  6. hibernate之映射文件VS映射注解

    前言 对于java开发者而言,注解应该不是一个陌生的概念,早在JavaSE阶段,例如@Override标记重写父类方法或实现接口方法,@Test标记单元测试方法,所以我们可以简单地把它理解为一种有特殊 ...

  7. Hibernate关联映射(多对一 --- many-to-one)

    转自:https://blog.csdn.net/fengxuezhiye/article/details/7369786?utm_source=blogxgwz9 Hibernate的关联映射关系有 ...

  8. Hibernate的映射文件

    映射文件的结构和属性 一个映射文件(mapping file)由一个根节点<hibernate-mapping>和多个<class>节点组成, 首先看看根节点<hiber ...

  9. Hibernate的映射文件配置

    对象关系的映射是用一个XML文档来说明的.映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等.下面从一个映射的例子开始讲解映射元素,映射文件的代码如下: <?x ...

随机推荐

  1. 6.19 noip模拟题(题目及解析转自 hzwer 2014-3-15 NOIP模拟赛)

    Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...

  2. 详解vue移动端 下拉刷新

    看完这篇文章,相信大伙也一样可以,做出一个自己的刷新,加载的组件 说这个功能之前,大家要先了解一下,要怎么触发滚动条事件. 一定要注意,所有滚动事件都必须要满足这个条件,横向滚动条也一样, 只要满足子 ...

  3. [HAOI 2007]理想的正方形

    Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. Input 第一行为3个整数,分别表示a,b,n的值第二行至第 ...

  4. HDU3389 Game

    Problem Description Bob and Alice are playing a new game. There are n boxes which have been numbered ...

  5. [SDOI2008]烧水问题

    题目描述 把总质量为1kg的水分装在n个杯子里,每杯水的质量均为(1/n)kg,初始温度均为0℃.现需要把每一杯水都烧开.我们可以对任意一杯水进行加热.把一杯水的温度升高t℃所需的能量为(4200*t ...

  6. 10分钟 5步 发布以太坊 ERC20 代币

    1.安装 METAMASK Brings Ethereum to your browser 一个可以浏览器上进行操作的以太坊钱包,推荐 Chrome. Chrome 插件安装地址: https://c ...

  7. PostgreSQL 中如何实现group_concat

    之前在MySQL中使用group_concat,觉得超级好用. 今天在PostgreSQL需要用到这样的场景,就去学习了一下. 在PostgreSQL中提供了arr_agg的函数来实现聚合,不过返回的 ...

  8. SQL Server 2008作业失败无法确定所有者是否有服务器访问权限

    调用作业---错误提示内容 该作业失败. 无法确定所有者 WIN-3TH1KNIT12D\Administrator (拥有作业 Database_Backup.step1)是否有服务器访问权限 (原 ...

  9. c# datatable增加列并赋值

    DataView dv = DataObj.GetBmfzr("03").Tables[0].DefaultView; dv.Sort = "bmbh"; Da ...

  10. Lintcode391 Number of Airplanes in the Sky solution 题解

    [题目描述] Given an interval list which are flying and landing time of the flight. How many airplanes ar ...