<?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="entity.Project" table="PROJECT" schema="RENT">
<id name="proid" type="java.lang.Integer">
<column name="PROID" precision="6" scale="0" />
<generator class="assigned" />
</id>
<property name="proname" type="java.lang.String">
<column name="PRONAME" length="100" not-null="true" />
</property>
<set name="employees" table="PROEMP" schema="RENT" cascade="save-update">
<key>
<column name="RPROID" precision="6" scale="0" not-null="true" />
</key>
<many-to-many entity-name="entity.Employee">
<column name="REMPID" precision="6" scale="0" not-null="true" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
package Test;

import static org.junit.Assert.*;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; import entity.Employee;
import entity.Project; import util.HibernateSessionFactory; public class Test5 { //多对多
@SuppressWarnings("unchecked")
@Test
public void test1() {
//一定要在配置中加级联保存的配置cascade="save-update"
Session session = HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
try {
Employee employee1 = new Employee(4, "duhe");
Employee employee2 = new Employee(5, "赵六"); Project project1 = new Project(4, "4号项目");
Project project2 = new Project(5, "5号项目");
//创建关联关系
project1.getEmployees().add(employee1);
project1.getEmployees().add(employee2); employee1.getProjects().add(project1);
employee2.getProjects().add(project1); project2.getEmployees().add(employee1); employee1.getProjects().add(project2); session.save(project1);
session.save(project2); tx.commit();
System.out.println("新增成功");
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
System.out.println("新增失败");
}finally{
session.close();
}
} }
package Test;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set; import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; import entity.Dept;
import entity.Emp; import util.HibernateSessionFactory; public class Test33 { // 级联增加
@Test
public void test1() {
Session session = HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
try {
//创建部门
Dept dept=new Dept();
dept.setDeptno(50);
dept.setDname("行政部");
dept.setLoc("china"); //创建员工
Emp emp1=new Emp();
emp1.setEmpno((short)8001);
emp1.setEname("liujuan");
emp1.setJob("吃饭");
emp1.setSal(9000D);
Emp emp2=new Emp();
emp2.setEmpno((short)8002);
emp2.setEname("duheyu");
emp2.setJob("睡觉");
emp2.setSal(1000D); //创建员工与部门关联关系
Set<Emp> emps=new HashSet<Emp>();
emps.add(emp1);
emps.add(emp2);
dept.setEmps(emps);
emp1.setDept(dept);
emp2.setDept(dept); //增加部门
session.save(dept);
tx.commit();
} catch (Exception e) {
tx.rollback();
} } // 级联删除
@Test
public void test2() {
Session session = HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
try {
/*Dept dept=new Dept();
dept.setDeptno(50);*/ //删除一个持久化对象
Dept dept=(Dept) session.get(Dept.class, 50);
session.delete(dept);
tx.commit();
System.out.println("删除成功");
} catch (Exception e) {
tx.rollback();
System.out.println("删除失败");
}
} // 级联查询
@Test
public void test3() {
Session session = HibernateSessionFactory.getSession();
try {
Dept dept = (Dept) session.get(Dept.class, 30);
Set<Emp> emps= dept.getEmps();
for (Emp emp : emps) {
System.out.println(emp.getEname()+"\t"+emp.getDept().getDeptno()+"\t"+emp.getSal());
}
} catch (Exception e) {
e.printStackTrace();
}
} //lazy属性:一对多。在一方配置
@Test
public void test4() {
Session session = HibernateSessionFactory.getSession();
try {
//没有用到emp,默认延迟加载 Dept.hbm.xml set中默认是配置lasy="true",延迟加载
Dept dept = (Dept) session.get(Dept.class, 30);
Set<Emp> emps= dept.getEmps();
//用到了才会去查询
for (Emp emp : emps) {
System.out.println(emp.getEname()+"\t"+emp.getDept().getDeptno()+"\t"+emp.getSal());
}
//加强延迟加载,使用于聚合函数查询中
System.out.println(emps.size());//统计一共有几条,要有select count(*)语句
//因为上面for循环查过一次,所以这里再统计,就不会再查一次。
//如果不写for循环,只输出总数,那么也会是2条语句,不会查询所有信息,只输出聚合函数的查询语句 } catch (Exception e) {
e.printStackTrace();
}
}
}

hibernate-cascade级联关系的更多相关文章

  1. Hibernate cascade级联

    cascade: 级联: 是对象的连锁操作 级联保存(一对多): 级联保存: 当保存双向关系的一方时,默认会报告错误,此时应该在customr中设置级联保存,即操作一个对象时,通过操作其他关联对象 如 ...

  2. hibernate(六) cascade(级联)和inverse关系详解

    序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也 ...

  3. Hibernate学习(六)———— cascade(级联)和inverse关系详解

    序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也 ...

  4. cascade(级联)和inverse关系详解

    序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也 ...

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

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

  6. hibernate 一对多(级联关系)

    hibernate 核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hiber ...

  7. Hibernate关联关系(二) Cascade级联

    1.cascade定义的是关系两端对象到对象的级联关系:而inverse定义的是关系和对象的级联关系. all : 所有情况下均进行关联操作.  none:所有情况下均不进行关联操作.这是默认值.  ...

  8. Hibernate Cascade & Inverse

    Cascade - 修改实体表 Inverse - 修改中间表 http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html 1.到底在 ...

  9. hibernate的映射关系之一对多

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

  10. hibernate cascade的真正含义

    hibernate cascade 是 @OneToOne @OneToMany @ManyToOne @ManyToMany等注解的属性,表示级联操作. /** * (Optional) The o ...

随机推荐

  1. 72个可交付成果(PMBOK2008)

    成果名称 包括内容 来自 用于 事业环境因素 组织文化.政府法规.行业标准.市场条件.工作授权系统.商业数据库.项目管理信息系统 外部现有的 启动.规划.执行过程的输入 组织过程资产 流程与程序(模板 ...

  2. MySQL备份还原——mysqldump工具介绍

    mysqldump是一款MySQL逻辑备份的工具,他将数据库里面的对象(表)导出成SQL脚本文件.有点类似于SQL SEVER的"任务-生成脚本"的逻辑备份功能.mysqldump ...

  3. MS SQL 错误:The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "test" was unable to begin a distributed transaction.

       一同事在测试服务器(系统:Windows 2008 R2 Standard 数据库:SQL SERVER 2008 R2)通过链接服务器test使用分布式事务测试时出错,出错信息如下: set ...

  4. IO redirect

    在OS中,每启动一个进程,就自动的分配了三个流到进程中. [0:标准输入流,即键盘输入].[1:标准输出流,输出到显示器].[2:错误输出流,输出到显示器],其余的还未指定. 基本IO操作 cmd & ...

  5. MongoDB学习笔记~为IMongoRepository接口添加了增删改方法,针对官方驱动

    回到目录 上一讲说了MongoDB官方驱动的查询功能,这回说一下官方驱动的增删改功能,驱动在升级为2.0后,相应的insert,update和delete都只有了异步版本(或者叫并行版本),这当然也是 ...

  6. MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)

    ----------------- [1] use master go sp_configure reconfigure with override go ----------------- [2] ...

  7. PostgreSQL-PL/pgSQL

    参考: https://wiki.postgresql.org/wiki/9.1%E7%AC%AC%E4%B8%89%E5%8D%81%E4%B9%9D%E7%AB%A0 摘记: PL/pgSQL是 ...

  8. springMVC 配置CharacterEncodingFilter之后不起效果

    最近开始自学springMVC框架,遇到中文乱码这一经典问题,记录下解决过程,以便后续忘记 web.xml 里过滤器配置如下: <?xml version="1.0" enc ...

  9. Linux 下编译openjdk

    操作系统ubuntu14.04 openjdk版本 7u4 openjdk7u4可以在https://jdk7.java.net/source.html下载   一.构建编译环境 sudo apt-g ...

  10. [WPF系列]-Deep Zoom

        参考 Deep Zoom in Silverlight