Hibernate实体映射文件多对多等关系简单应用技巧
认真开完以后,就能很简单的写出各种关系了
第一步,写注释:
<!--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实体映射文件多对多等关系简单应用技巧的更多相关文章
- (转)Hibernate关联映射——对象的三种关系
http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射——对象的三种关系 Hibernate框架基于ORM设 ...
- Hibernate---数据操作示例BY实体映射文件
创建一个Student.java类:该类需要一个无参的构造函数,以及属性的get/set方法 public class Student implements Serializable { privat ...
- 使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同
假设是使用oracle数据库.那么hibernate的映射文件.hbm.xml例如以下: <id name="xuehao" column="xuehao" ...
- Hibernate之深入Hibernate的映射文件
这周周末 要把hibernate的映射文件搞定 .. 1.映射文件的主结构 主要结构 :根元素为<hibernate-mapping ></hibernate-mapping> ...
- Hibernate实体映射配置(XML)简单三步完美配置
我们在使用Hibernate框架的时候,非常纠结的地方就是实体和表之间的映射,今天借助汤老师的思路写了小教程,以后配置不用纠结了! 第一步:写注释 格式为:?属性,表达的是本对象与?的?关系. 例:“ ...
- hibernate之映射文件VS映射注解
前言 对于java开发者而言,注解应该不是一个陌生的概念,早在JavaSE阶段,例如@Override标记重写父类方法或实现接口方法,@Test标记单元测试方法,所以我们可以简单地把它理解为一种有特殊 ...
- Hibernate关联映射(多对一 --- many-to-one)
转自:https://blog.csdn.net/fengxuezhiye/article/details/7369786?utm_source=blogxgwz9 Hibernate的关联映射关系有 ...
- Hibernate的映射文件
映射文件的结构和属性 一个映射文件(mapping file)由一个根节点<hibernate-mapping>和多个<class>节点组成, 首先看看根节点<hiber ...
- Hibernate的映射文件配置
对象关系的映射是用一个XML文档来说明的.映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等.下面从一个映射的例子开始讲解映射元素,映射文件的代码如下: <?x ...
随机推荐
- codeforces 888G Xor-MST
You are given a complete undirected graph with n vertices. A number ai is assigned to each vertex, a ...
- 组合数问题(zyys版)
[问题描述]定义"组合数"S(n,m)代表将 n 个不同的元素拆分成 m 个非空集合的方案数.举个栗子,将{1,2,3}拆分成 2 个集合有({1},{2,3}),({2},{1, ...
- [Apio2012]dispatching 左偏树
题目描述 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增 ...
- ●BZOJ 1042 [HAOI2008]硬币购物
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1042 题解: 容斥原理,dp预处理首先跑个无限物品的背包dp求出dp[i]表示在四种物品都有 ...
- bzoj 2440 (莫比乌斯函数)
bzoj 2440 完全平方数 题意:找出第k个不是完全平方数的正整数倍的数. 例如 4 9 16 25 36什么的 通过容斥原理,我们减去所有完全数 4有n/4个,但是36这种会被重复减去, ...
- Java Servlet 笔记4
Servlet 客户端 HTTP 请求 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的. 读取 HTTP 头的 ...
- SpringMVC与Zookeeper、Dubbo使用示例
Dubbo整合Zookeeper和spring示例程序 1.Dubbo架构 本篇文章基于dubbox,使用dubbo应该也可以正常运行. 我认为想讲清楚一个任何一个技术框架,首先熟悉架构是非常有必要的 ...
- Response ServletContext 中文乱码 Request 编码 请求行 共享数据 转发重定向
Day35 Response 1.1.1 ServletContext概念 u 项目的管理者(上下文对象),服务器启动时,会为每一个项目创建一个对应的ServletContext对象. 1.1.2 ...
- Linux 管理软件
公司的openfire先前运行在windows上的,但由于在windows上openfire内存机制问题,最多只能占用2GB内存,且时间稍微长久一些就会自动挂掉,用户无法登陆和连接,因此迁移到了Cen ...
- C# ref与out
ref参数是引用,out参数为输出参数.我写一个控制台的程序来说明一下两者的特点和区别: class Program { 3 public static void RefMethod( ref int ...