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

第一步,写注释:

<!--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. python字符串-内置方法列举

    所谓内置方法,就是凡是字符串都能用的方法,这个方法在创建字符串的类中,下面是总结: 首先,我们要学习一个获取帮助的内置函数 help(对象) ,对象可以是一个我们创建出来的,也可以是创建对象的那个类, ...

  2. bzoj 5290: [Hnoi2018]道路

    Description Solution PJDP毁青春 注意到性质:到根的道路不超过 \(40\) 条 所以我们只关系一个点上面的道路的情况就行了 设 \(f[x][i][j]\) 表示一个点 \( ...

  3. hdu5652 India and China Origins(并查集)

    India and China Origins  Accepts: 49  Submissions: 426  Time Limit: 2000/2000 MS (Java/Others)  Memo ...

  4. OCP 认证考试报名费技巧题库051052053解析合格线

    本人于2017年4月22日通过参加OCP考试,第一次参加,一天之内考了三门,三门一次性通过,052 - 95% ,053 - 86% ,051 - 100% 一.关于考试考试报名费: 052:158$ ...

  5. 根据构建类型自动修改依赖库的BuildConfig.DEBUG的值

    app模块引用了library,在library模块中控制日志输出使用的是 if (BuildConfig.DEBUG) { logger.d("print %s", msg); ...

  6. python学习之装饰器-

    python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer() ...

  7. DELL、HP、IBM X86服务器命名规则

    DELL.HP.IBM X86服务器命名规则 各大服务器厂家对于自己的服务器命名都有一定的规则,通常会根据服务器的外观(如塔式.机架式.刀片等).处理器(如Intel或者AMD等).架构等信息来命名. ...

  8. Oracle trunc()函数的用法及四舍五入 round函数

    --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual  --2011 ...

  9. JAVA学习总结-多线程基础:

    参考书籍:疯狂JAVA讲义 1.进程和线程; 进程是处于运行过程中的程序;并且具有一定的独立功能;进程是系统进行系统资源分配和调度的一个独立单位. 一般而言,进程包括以下三个特征: 独立性:进程是系统 ...

  10. 用js来实现那些数据结构12(散列表)

    上一篇写了如何实现简单的Map结构,因为东西太少了不让上首页.好吧... 这一篇文章说一下散列表hashMap的实现.那么为什么要使用hashMap?hashMap又有什么优势呢?hashMap是如何 ...