Hibernate关联关系映射
1. Hibernate关联关系映射
1.1. one to one
|
<class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <join table="PersonAddress" optional="true"> <key column="personId" unique="true"/> <many-to-one name="address" column="addressId" not-null="true" unique="true"/> </join> </class> <class name="Address"> <id name="id" column="addressId"> <generator class="native"/> </id> </class> |
1.2. one to many
|
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.morris.hql.entity.Department" table="DEPARTMENT" schema="SCOTT"> <id name="deptid" type="java.lang.String"> <column name="DEPTID" length="20" /> <generator class="assigned" /> </id> <property name="deptname" type="java.lang.String"> <column name="DEPTNAME" length="20" not-null="true" /> </property> <set name="employees" inverse="true"> <key> <column name="DEPTID" length="20" /> </key> <one-to-many class="com.morris.hql.entity.Employee" /> </set> </class> </hibernate-mapping> |
1.3. many to one
|
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.morris.hql.entity.Employee" table="EMPLOYEE" schema="SCOTT"> <id name="empid" type="java.lang.String"> <column name="EMPID" length="20" /> <generator class="assigned" /> </id> <many-to-one name="department" class="com.morris.hql.entity.Department" fetch="select"> <column name="DEPTID" length="20" /> </many-to-one> <property name="empname" type="java.lang.String"> <column name="EMPNAME" length="20" not-null="true" /> </property> </class> </hibernate-mapping> |
1.4. many to many
|
<class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <set name="addresses" table="PersonAddress"> <key column="personId"/> <many-to-many column="addressId" class="Address"/> </set> </class> <class name="Address"> <id name="id" column="addressId"> <generator class="native"/> </id> </class> |
1.5. 实例
1.5.1. 级联添加
|
public Session session = HibernateSessionFactory.getSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); dept.getEmployees().add(emp); emp.setDepartment(dept); session.save(dept); transaction.commit(); } catch (Exception e) { if (transaction != transaction.rollback(); } e.printStackTrace(); } finally { if (session != session.close(); } } } |
打印的sql语句
|
Hibernate: select employee_.EMPID, employee_.DEPTID as DEPTID0_, employee_.EMPNAME as EMPNAME0_ from SCOTT.EMPLOYEE employee_ where employee_.EMPID=? Hibernate: insert into SCOTT.DEPARTMENT (DEPTNAME, DEPTID) values (?, ?) Hibernate: insert into SCOTT.EMPLOYEE (DEPTID, EMPNAME, EMPID) values (? , ? , ? ) |
1.5.2. 级联删除
|
public Session session = HibernateSessionFactory.getSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); session.delete(dept); transaction.commit(); } catch (Exception e) { if (transaction != transaction.rollback(); } e.printStackTrace(); } finally { if (session != session.close(); } } } |
打印的sql语句
|
Hibernate: select department0_.DEPTID as DEPTID1_1_, department0_.DEPTNAME as DEPTNAME1_1_, employees1_.DEPTID as DEPTID3_, employees1_.EMPID as EMPID3_, employees1_.EMPID as EMPID0_0_, employees1_.DEPTID as DEPTID0_0_, employees1_.EMPNAME as EMPNAME0_0_ from SCOTT.DEPARTMENT department0_ left outer join SCOTT.EMPLOYEE employees1_ on department0_.DEPTID=employees1_.DEPTID where department0_.DEPTID=? Hibernate: delete from SCOTT.EMPLOYEE where EMPID=? Hibernate: delete from SCOTT.DEPARTMENT where DEPTID=? |
1.5.3. 级联改动
|
public Session session = HibernateSessionFactory.getSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); Department dept = (Department) session.load(Department.class, Employee emp = (Employee) session.load(Employee.class, dept.setDeptname("就业部"); emp.setEmpname("a"); session.update(dept); session.update(emp); transaction.commit(); } catch (Exception e) { if (transaction != transaction.rollback(); } e.printStackTrace(); } finally { if (session != session.close(); } } } |
打印的sql语句
|
Hibernate: select department0_.DEPTID as DEPTID1_1_, department0_.DEPTNAME as DEPTNAME1_1_, employees1_.DEPTID as DEPTID3_, employees1_.EMPID as EMPID3_, employees1_.EMPID as EMPID0_0_, employees1_.DEPTID as DEPTID0_0_, employees1_.EMPNAME as EMPNAME0_0_ from SCOTT.DEPARTMENT department0_ left outer join SCOTT.EMPLOYEE employees1_ on department0_.DEPTID=employees1_.DEPTID where department0_.DEPTID=? Hibernate: select employee0_.EMPID as EMPID0_0_, employee0_.DEPTID as DEPTID0_0_, employee0_.EMPNAME as EMPNAME0_0_ from SCOTT.EMPLOYEE employee0_ where employee0_.EMPID=? Hibernate: update SCOTT.DEPARTMENT set DEPTNAME=? where DEPTID=? Hibernate: update SCOTT.EMPLOYEE set DEPTID=?, EMPNAME=? where EMPID=? |
1.5.4. 级联查询
|
public Employee queryEmployeeById(String id){ Session session = HibernateSessionFactory.getSession(); Employee employee = null; try { employee = (Employee) session.load(Employee.class, id); System.out.println(employee.getEmpname()); } finally { if (session != session.close(); } } return employee; } |
打印的sql语句
|
Hibernate: select employee0_.EMPID as EMPID0_0_, employee0_.DEPTID as DEPTID0_0_, employee0_.EMPNAME as EMPNAME0_0_ from SCOTT.EMPLOYEE employee0_ where employee0_.EMPID=? Hibernate: select department0_.DEPTID as DEPTID1_0_, department0_.DEPTNAME as DEPTNAME1_0_ from SCOTT.DEPARTMENT department0_ where department0_.DEPTID=? a |
Hibernate关联关系映射的更多相关文章
- Hibernate关联关系映射之一对一关联关系
人和身份证之间就是一个典型的一对一关联关系.实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式 首先看他们的实体类 Person类 ? 1 2 3 4 5 ...
- hibernate关联关系映射详解
词汇解释 关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间 ...
- hibernate关联关系映射之配置文件
词汇解释 关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间 ...
- Hibernate关联关系映射之一对多双向映射
一对多映射有两种,一种是单向的,另一种的多向.我们一般是使用双向的,所以我就写写一对多的双向映射. 还是想昨天一样举个例子来说明:作者<===>作品,还是对数据进行增删改查. 我们一般是把 ...
- Hibernate关联关系映射之一对一(主键关联)
在业务成的域模型中,类和类之间最普遍的关系就是关联关系,而关联也是有方向的. 就以例子来说明:一个人对应一张身份证.对其进行增删改. 对于人在数据创建表的时候,我们就给他两个字段,一个是id号,一个就 ...
- Hibernate学习笔记(3)---hibernate关联关系映射
一对一关联 假设有两个持久化类(实体类)User与Address,它们之间存在一对一的关系 1,通过主键关联(个人偏向另外一种) User.hbm.xml文件配置 <id name=" ...
- 1-7 hibernate关联关系映射
1.关联关系分为单向关联(一对一,一对多,多对一,多对多),多向关联(一对一,一对多,多对多). 2.单向一对一主键关联实例 需要为one-to-one元素指定constrained属性值为true. ...
- hibernate学习四 hibernate关联关系映射
在Hibernate中对象之间的关联关系表现为数据库中表于表之间的关系(表之间通过外键关联). 1 单向的一对一 主键关联 外键关联 2 单向的一对多 3 单向的多对一 4 单向的多对多 5 双向的 ...
- Hibernate 关联关系映射实例
双向多对一/一对多(many-to-one/one-to-many) 例子,多个学生对应一个班级,一个班级对应多个学生: 班级类,Grade.java: public class Grade { pr ...
随机推荐
- HDU 1171 Big Event in HDU(DP)
点我看题目 题意 : 给你一个n,然后n组数据,每组两个数字,一个是物品的价值,另外一个是物品的数量,让你尽量将这些东西分成价值相等的两份,如果无法相等就前一份要大于后一份. 思路 :这个题可以转化成 ...
- POJ 2942 Knights of the Round Table(双连通分量)
http://poj.org/problem?id=2942 题意 :n个骑士举行圆桌会议,每次会议应至少3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置.如果意见发生分歧,则需要举手表决,因此 ...
- SEO 网站页面SEO优化之页面title标题优化
在seo优化中,标题的优化占着举足轻重的地位,无论是从用户体验的角度出发,还是从搜索引擎的排名效果出发,title标题都是页面优化最最重要的因素.笔者总结了优化title标题应该注意的六个方面: ①. ...
- php重定向跳转
一.用HTTP头信息 也就是用PHP的HEADER函数.PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令,例如声明返回信息的类型("Co ...
- easyui源码翻译1.32--PropertyGrid(属性表格)
前言 继承自$.fn.datagrid.defaults.使用$.fn.propertygrid.defaults重写默认值对象.下载该插件翻译源码 属性表格提供The propertygrid pr ...
- Python sh库学习 上篇
官方文档有句话"allows you to call any program",并且:helps you write shell scripts in Python by givi ...
- 【PythonChallenge】Level 5
题目主要找发声类似于Peak Hell的Python模块,查了一下手册pickle已经是最像的了.看了一下源代码,发现panner.p.如同发现了新大陆,拷贝内容.使用pickle解答.答案为chan ...
- wzplayer for android V1.5.3 (新增YUV文件播放)
wzplayer for android V1.5.3 新增功能 1.使用gl es2 播放 yuv 文件. 联系方式:weinyzhou86@gmail.com QQ:514540005 版权所有, ...
- Android开发之ADT中无Annotation Processin的解决办法
使用ButterKnife的时候,进入ADT中设置的时候发现在Java Compiler展开后无Annotation Processin 解决办法: 安装插件:Juno - http://downlo ...
- BZOJ_1617_[Usaco2008_Mar]_River_Crossing_渡河问题_(动态规划)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1617 FJ要把\(n\)头奶牛用船运到河对岸.FJ自己在船上要用\(m\)时间,如果运送\(i ...