1.创建如下项目结构

2.在项目的src下创建hibernate.cfg.xml主配置文件

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property> <mapping resource="com/entity/Dept.hbm.xml"/>
<mapping resource="com/entity/Emp.hbm.xml"/>
</session-factory>
</hibernate-configuration>

hibernate.cfg.xml

3.在项目的src下的com.entity包下创建Dept.java

 package com.entity;

 import java.util.HashSet;
import java.util.Set; public class Dept {
/**
* 部门编号
*/
private int deptno;
/**
* 部门名称
*/
private String dname;
/**
* 部门位置
*/
private String loc;
/**
* 创建set集合
*/
private Set<Emp> empset=new HashSet<Emp>(); public Dept() {
}
public Dept(int deptno, String dname, String loc) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
} public Dept(int deptno, String dname, String loc, Set<Emp> empset) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
this.empset = empset;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
} public Set<Emp> getEmpset() {
return empset;
}
public void setEmpset(Set<Emp> empset) {
this.empset = empset;
}
@Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + ", empset="
+ empset + ", loc=" + loc + "]";
} }

Dept.java

4.在项目的src下的com.entity包下创建Emp.java

 package com.entity;

 import java.util.Date;

 public class Emp {
/**
* 员工编号
*/
private Integer empno;
/**
* 员工姓名
*/
private String ename;
/**
* 员工工作
*/
private String job;
/**
* 员工领导编号
*/
private Integer mgr;
/**
* 员工雇佣日期
*/
private Date hiredate;
/**
* 员工工资
*/
private Integer sal;
/**
* 员工奖金
*/
private Integer comm;
/**
* 部门外键
* 引入部门对象
*/
private Dept dept;
public Emp() {
super();
}
public Emp(Integer empno, String ename, String job, Integer mgr,
Date hiredate, Integer sal, Integer comm, Dept dept) {
this.empno = empno;
this.ename = ename;
this.job = job;
this.mgr = mgr;
this.hiredate = hiredate;
this.sal = sal;
this.comm = comm;
this.dept = dept;
} public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Integer getMgr() {
return mgr;
}
public void setMgr(Integer mgr) {
this.mgr = mgr;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public Integer getSal() {
return sal;
}
public void setSal(Integer sal) {
this.sal = sal;
}
public Integer getComm() {
return comm;
}
public void setComm(Integer comm) {
this.comm = comm;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp [comm=" + comm + ", dept=" + dept + ", empno=" + empno
+ ", ename=" + ename + ", hiredate=" + hiredate + ", job="
+ job + ", mgr=" + mgr + ", sal=" + sal + "]";
} }

Emp.java

5.在项目的src下的com.entity包下创建Dept.hbm.xml

 <?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" >
<hibernate-mapping>
<class name="com.entity.Dept" table="DEPT" schema="SCOTT" lazy="true">
<!-- 主键配置 -->
<id name="deptno" type="java.lang.Integer" column="DEPTNO">
<!-- 主键由应用程序负责生成 -->
<generator class="assigned"/>
</id>
<!-- 部门名称 -->
<property name="dname" type="java.lang.String" column="DNAME"/> <!-- 部门位置 -->
<property name="loc" type="java.lang.String" column="LOC"/> <!--
一对多映射
cascade级联:操作主表时同时操作从表
cascade="save-update" 级联增和该
cascade="delete" 级联删除
cascade="none" 忽略关联
cascade="all"级联增删改
-->
<!-- inverse="false"主动维护关联关系,false主动方,true被动方(当从表修改时,主表不修改)
inverse="false"两条update
inverse="true" 一条update -->
<set name="empset" cascade="all" inverse="true" order-by="ename asc">
<!-- 本表主键列,对应emp的外键列 -->
<key column="DEPTNO"></key>
<!-- 集合存储的数据类型 -->
<one-to-many class="com.entity.Emp"/>
</set>
</class>
</hibernate-mapping>

Dept.hbm.xml

6.在项目的src下的com.entity包下创建Emp.hbm.xml

 <?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" >
<hibernate-mapping>
<class name="com.entity.Emp" table="EMP" schema="scott" >
<id name="empno" type="java.lang.Integer" column="EMPNO">
<generator class="assigned"/>
</id>
<property name="ename" type="java.lang.String" column="ENAME"/>
<property name="job" type="java.lang.String" column="JOB"/>
<property name="mgr" type="java.lang.Integer" column="MGR"/>
<property name="hiredate" type="java.util.Date" column="HIREDATE"/>
<property name="sal" type="java.lang.Integer" column="SAL"/>
<property name="comm" type="java.lang.Integer" column="COMM" not-null="false" /> <!-- 多对一映射:name是emp中外键字段引用的对象,class是对象的类型,column是数据库中对应的外键列字段名 -->
<many-to-one name="dept" class="com.entity.Dept" column="DEPTNO"/>
</class>
</hibernate-mapping>

Emp.hbm.xml

7.在项目的src下的com.util包下创建HibernateUtil.java

HibernateUtil.java

8.在项目的src下的com.dao包下创建EmpDao.java

 package com.dao;

 import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.logging.SimpleFormatter; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.entity.Dept;
import com.entity.Emp;
import com.util.HibernateUtil; public class DeptDao { public static void main(String[] args) {
System.out.println("--------------------1.保存:部门对象,插入2条,修改1条------------------");
//saveDept();
System.out.println("----------------2.删除部门数据级联删除员工--------------------------------------");
// deleteDept(4);
System.out.println("----------------3.修改员工--------------------------------------");
//updateEmp(2,1);
System.out.println("-------------------4.查询某部门下的所有员工,并按姓名排序order-by-------------------------------------");
//getEmpByDeptno(10);
System.out.println("-------------------5.查询某部门信息--lazy=false-----------------------------------");
//getDeptByDeptno(10);
System.out.println("-------------------6.查询某部门信息--lazy=true-----------------------------------");
saveEmp(10); }
/**
* -6.查询某部门信息--lazy=true懒加载 ,查的时候用load懒加载查询的方式
* @param id
*/
private static void saveEmp(int id) {
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction(); //查单条load懒加载
Dept dept=(Dept) session.load(Dept.class, id);
Date date=null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse("2013-3-3");
} catch (ParseException e) {
e.printStackTrace();
}
Emp emp=new Emp(6, "holly", "教员", 2, date, 2300, 200, dept); //添加员工信息
session.save(emp);
tx.commit();
System.out.println("添加成功"); HibernateUtil.closeSession(); }
/**
* 5.查询某部门信息
* dept类级别的lazy=false 立即加载 ,查的时候用get立即加载的方式
* 1条查询sql
* @param i
*/
private static void getDeptByDeptno(int id) {
Session session=HibernateUtil.getSession(); //查单条
Dept dept=(Dept) session.load(Dept.class, id); HibernateUtil.closeSession(); }
/**
* 4.查询某部门下的所有员工,并按姓名排序order-by
* @param i
*/
private static void getEmpByDeptno(int id) {
Session session=HibernateUtil.getSession(); //查单条
Dept dept=(Dept) session.get(Dept.class, id);
Set<Emp> emps=dept.getEmpset();
for (Emp emp : emps) {
System.out.println(emp.getEname());
}
HibernateUtil.closeSession(); }
/**
* 3.修改员工
* @param empno
* @param deptno
*/
private static void updateEmp(int empno,int deptno) {
Session session=HibernateUtil.getSession();
//2.开启事务
Transaction tx=session.beginTransaction();
//查单条
Dept dept=(Dept) session.load(Dept.class, deptno);
Emp emp=(Emp) session.load(Emp.class, empno);
/*
* 监测到Emp对象的属性发生变化,所以执行
* update
scott.EMP
set
ENAME=?,
JOB=?,
MGR=?,
HIREDATE=?,
SAL=?,
COMM=?,
DEPTNO=?
where
EMPNO=?
*/
emp.setDept(dept);
/*(inverse=false)主动,监测到Dept对象的属性发生变化,所以执行
update
scott.EMP
set
DEPTNO=?
where
EMPNO=?
(inverse=true)被动,没有上面一条update
*/
dept.getEmpset().add(emp);
System.out.println("修改成功"); tx.commit();
HibernateUtil.closeSession(); } /**
* 2.删除
* @param id
*/
private static void deleteDept(int id) {
Session session=HibernateUtil.getSession();
//2.开启事务
Transaction tx=session.beginTransaction();
//查单条
Dept dept=(Dept) session.get(Dept.class, id);
if(dept!=null){
session.delete(dept);
System.out.println("删除成功");
}else{
System.out.println("该条数据不存在");
}
tx.commit();
HibernateUtil.closeSession(); } /**
* 1.保存:1部门和2员工-----3条sql
*/
private static void saveDept() {
//1.开启Session
Session session=HibernateUtil.getSession(); //2.开启事务
Transaction tx=session.beginTransaction(); //3.执行操作
//创建部门对象
Dept dept=new Dept(3, "教职部", "安德门");
Date date=null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse("2013-3-3");
} catch (ParseException e) {
e.printStackTrace();
} //创建员工对象
Emp emp1=new Emp(4, "holly", "教员", 2, date, 2300, 200, dept); //向集合总添加员工信息(1条sql)
dept.getEmpset().add(emp1); //保存Dept对象(2条插入)
session.save(dept); //4.提交事务
tx.commit();
System.out.println("Emp保存成功"); //5.关闭Session
HibernateUtil.closeSession();
} }

DeptDao.java

9.结果自己验证...

7.hibernat实现双向一对多(多对一)的更多相关文章

  1. hibernate 自生双向一对多 多对一管理 (树)

    <span style="font-size: large;">package com.javacrazyer.test; import java.io.Seriali ...

  2. JPA 一对一 一对多 多对一 多对多配置

    1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  3. 8、双向一对多的关联关系(等同于双向多对一。1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用)

    双向一对多关联关系 “双向一对多关联关系”等同于“双向多对一关联关系”:1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用. 还是用客户Customer和订单Order来解释: “一对多 ...

  4. hibernate中配置单向多对一关联,和双向一对多,双向多对多

    什么是一对多,多对一? 一对多,比如你去找一个父亲的所有孩子,孩子可能有两个,三个甚至四个孩子. 这就是一对多 父亲是1 孩子是多 多对一,比如你到了两个孩子,它们都是有一个共同的父亲. 此时孩子就是 ...

  5. Hibernate中用注解配置一对多双向关联和多对一单向关联

    Hibernate中用注解配置一对多双向关联和多对一单向关联 Hibernate提供了Hibernate Annotations扩展包,使用注解完成映射.在Hibernate3.3之前,需单独下载注解 ...

  6. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  7. Hibernate一对多(多对一)关联关系

    上一篇博文总结了 Hibernate 的一对一的关联关系, 包括基于主键的单向一对一, 基于外键的单向一对一, 基于外键的双向一对一. 下面咱们说一下 Hibernate 的一对多关联关系. 其实一对 ...

  8. Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

    1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...

  9. JPA学习笔记(8)——映射双向一对多关联关系

    双向一对多关联关系 前面的博客讲的都是单向的,而本问讲的是双向的(双向一对多 = 双向多对一) 什么是双向? 我们来对照一下单向和双向 单向/双向 User实体类中是否有List< Order& ...

随机推荐

  1. 基于C++的类编程总结

    1. 类中public, protected, private这三个属性的区别: public意味着所有事物都能查询具有该属性的食物.(也即所有人可以在我不知情的情况下,查看我账户里还有多少钱). p ...

  2. [MFC美化] SkinMagic使用详解2- SkinMagic常用函数介绍

    SkinMagic常用函数介绍 (1)InitSkinMagicLib函数:初始化SkinMagic int InitSkinMagicLib( //初始化SkinMagic工具库 HINSTANCE ...

  3. 【 VS 插件开发 】二、了解Vs插件结构

    [ VS 插件开发 ]二.了解Vs插件结构

  4. 【转】gcc/g++ 如何支持c11 / c++11标准编译

     如果用命令 g++ -g -Wall main.cpp  编译以下代码 : 1 2 3 4 5 6 7 8 9 10 11 12 /*     file : main.cpp */ #include ...

  5. Dom编程(一)

    dom:document object model 文档对象模型 1.事件 body 事件:onload onunload onbeforeunload body.document对象的事件 (1)o ...

  6. jQuery Validate【强大的表单验证】

    一.引入菜鸟教程提供的 1.14.0 版本下载地址:http://static.runoob.com/download/jquery-validation-1.14.0.zip <script ...

  7. 序列化与反序列化总结(Serializable和Parcelable)

    序列化是指将对象的状态信息转换为可以存储或传输的形式的过程. 在Java中创建的对象,只要没有被回收就可以被复用,但是,创建的这些对象都是存在于JVM的堆内存中,JVM处于运行状态时候,这些对象可以复 ...

  8. ACM第四次积分赛

    虽然因为第一题给的数据有问题,没能四道题都做出来,但是这次第四名,进步很大,继续努力! SAU-ACM总比赛成绩       姓名     账号  上学期成绩 第一次成绩 第二次成绩 第三次成绩 第四 ...

  9. 学习Java第一篇——Java 安装及环境搭配

    内容提要: 1.下载JDK: 2.安装JDK: 3.配置JDK;   第一,下载JDK:  1.登陆网址:www.oracle.com 2.点击 Downloads 3.选择 Java SE 4.选择 ...

  10. 使用firbug调试程序写更高质量的代码设置方法

    在搜狐浏览器内输入about:config 在搜索栏中输入:strict 双击javascript.options.strict,将值变为true