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
void
addDeptEmp(Department dept, Employee emp) {

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 !=
null) {

transaction.rollback();

}

e.printStackTrace();

} finally {

if (session !=
null) {

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
void
deleteDeptEmp(Department dept, Employee emp) {

Session session = HibernateSessionFactory.getSession();

Transaction transaction = null;

try {

transaction = session.beginTransaction();

session.delete(dept);

transaction.commit();

} catch (Exception e) {

if (transaction !=
null) {

transaction.rollback();

}

e.printStackTrace();

} finally {

if (session !=
null) {

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
void
updateDeptEmp() {

Session session = HibernateSessionFactory.getSession();

Transaction transaction = null;

try {

transaction = session.beginTransaction();

Department dept = (Department) session.load(Department.class,
"5");

Employee emp = (Employee) session.load(Employee.class,
"1001");

dept.setDeptname("就业部");

emp.setEmpname("a");

session.update(dept);

session.update(emp);

transaction.commit();

} catch (Exception e) {

if (transaction !=
null) {

transaction.rollback();

}

e.printStackTrace();

} finally {

if (session !=
null) {

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 !=
null) {

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关联关系映射的更多相关文章

  1. Hibernate关联关系映射之一对一关联关系

    人和身份证之间就是一个典型的一对一关联关系.实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式 首先看他们的实体类 Person类 ? 1 2 3 4 5 ...

  2. hibernate关联关系映射详解

    词汇解释 关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间 ...

  3. hibernate关联关系映射之配置文件

    词汇解释 关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间 ...

  4. Hibernate关联关系映射之一对多双向映射

    一对多映射有两种,一种是单向的,另一种的多向.我们一般是使用双向的,所以我就写写一对多的双向映射. 还是想昨天一样举个例子来说明:作者<===>作品,还是对数据进行增删改查. 我们一般是把 ...

  5. Hibernate关联关系映射之一对一(主键关联)

    在业务成的域模型中,类和类之间最普遍的关系就是关联关系,而关联也是有方向的. 就以例子来说明:一个人对应一张身份证.对其进行增删改. 对于人在数据创建表的时候,我们就给他两个字段,一个是id号,一个就 ...

  6. Hibernate学习笔记(3)---hibernate关联关系映射

    一对一关联 假设有两个持久化类(实体类)User与Address,它们之间存在一对一的关系 1,通过主键关联(个人偏向另外一种) User.hbm.xml文件配置 <id name=" ...

  7. 1-7 hibernate关联关系映射

    1.关联关系分为单向关联(一对一,一对多,多对一,多对多),多向关联(一对一,一对多,多对多). 2.单向一对一主键关联实例 需要为one-to-one元素指定constrained属性值为true. ...

  8. hibernate学习四 hibernate关联关系映射

    在Hibernate中对象之间的关联关系表现为数据库中表于表之间的关系(表之间通过外键关联). 1 单向的一对一 主键关联  外键关联 2 单向的一对多 3 单向的多对一 4 单向的多对多 5 双向的 ...

  9. Hibernate 关联关系映射实例

    双向多对一/一对多(many-to-one/one-to-many) 例子,多个学生对应一个班级,一个班级对应多个学生: 班级类,Grade.java: public class Grade { pr ...

随机推荐

  1. jsp接收相同复合参数 request.getParameterValues()用法

    在网站中往往需要用户选择复选框,此时需要创建多个复选框让用户进行选择: <head> <meta http-equiv="Content-Type" conten ...

  2. configure脚本参数介绍

    configure脚本有大量的命令行选项. 下面对每一个选项进行简略的介绍: --cache-file=FILE'configure' 会在你的系统上测试存在的特性(或者bug!).为了加速随后进行的 ...

  3. MySql 命令积累

    一. 修改表的自增起点 ; 二.获取自增键值 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID ...

  4. [jobdu]数组中出现次数超过一半的数字

    找到以后要再扫一遍确认. http://zhedahht.blog.163.com/blog/static/25411174201085114733349/ #include <iostream ...

  5. SPRING IN ACTION 第4版笔记-第七章Advanced Spring MVC-006- 如何保持重定向的request数据(用model、占位符、RedirectAttributes、model.addFlashAttribute("spitter", spitter);)

    一.redirect为什么会丢数据? when a handler method completes, any model data specified in the method is copied ...

  6. 匿名函数和Lambda表达式

    这个题目有点牵强,真不知道如何取一个比较中意的名称,写技术博客,我很少拘泥小节,但是注重细节,如果细节都出现问题了,那么这个博文也就失去了价值. 其实应该从委托说起,委托是C#中的一个重要的内容,记得 ...

  7. 【HDOJ】5046 Airport

    DLX简单题目. /* 5046 */ #include <iostream> #include <string> #include <map> #include ...

  8. poj3368Frequent values(RMQ)

    http://poj.org/problem?id=3368 追完韩剧 想起这题来了 想用线段树搞定来着 结果没想出来..然后想RMQ 想出来了 算是离散吧 把每个数出现的次数以及开始的位置及结束的位 ...

  9. bzoj1930

    一开始我觉得这不是一个弱弱的费用流吗? 每个豆豆拆点,入点出点随便连连 由于肯定是DAG图,边权为正的最大费用肯定能增广出来 于是我们只要跑总流量为2的最大费用最大流不就行了吗 但是 这样会TLE,因 ...

  10. Java开发心得

    1. Spring概述 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的.框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J ...