hibernate-cascade级联关系
<?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级联关系的更多相关文章
- Hibernate cascade级联
cascade: 级联: 是对象的连锁操作 级联保存(一对多): 级联保存: 当保存双向关系的一方时,默认会报告错误,此时应该在customr中设置级联保存,即操作一个对象时,通过操作其他关联对象 如 ...
- hibernate(六) cascade(级联)和inverse关系详解
序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也 ...
- Hibernate学习(六)———— cascade(级联)和inverse关系详解
序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也 ...
- cascade(级联)和inverse关系详解
序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也 ...
- Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射
1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...
- hibernate 一对多(级联关系)
hibernate 核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hiber ...
- Hibernate关联关系(二) Cascade级联
1.cascade定义的是关系两端对象到对象的级联关系:而inverse定义的是关系和对象的级联关系. all : 所有情况下均进行关联操作. none:所有情况下均不进行关联操作.这是默认值. ...
- Hibernate Cascade & Inverse
Cascade - 修改实体表 Inverse - 修改中间表 http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html 1.到底在 ...
- hibernate的映射关系之一对多
关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间通过某种方 ...
- hibernate cascade的真正含义
hibernate cascade 是 @OneToOne @OneToMany @ManyToOne @ManyToMany等注解的属性,表示级联操作. /** * (Optional) The o ...
随机推荐
- ICompare接口、Sort()方法
1.接口中的方法并不实现具体功能,继承于该接口的类必须实现具体功能. 核心思想:对修改封闭,对扩展开放. 2.Sort()方法: 默认:Sort(内容) 英文:按照首字母顺序排序,首字母相同则看第二个 ...
- RMAN异机还原遭遇ORA-19698错误案例
实验环境: 操作系统 :Oracle Linux Server release 5.7 64 bit 数据库版本:Oracle Datab ...
- [AlwaysOn Availability Groups]DMV和系统目录视图
DMV和系统目录视图 这里主要介绍AlwaysON的动态管理视图,可以用来监控和排查你的AG. 在AlwaysOn Dashboard,你可以简单的配置的GUI显示很多可用副本的DMV和可用数据库通过 ...
- 【hive】——metastore的三种模式
Hive中metastore(元数据存储)的三种方式: 内嵌Derby方式 Local方式 Remote方式 [一].内嵌Derby方式 这个是Hive默认的启动模式,一般用于单元测试,这种存储方式有 ...
- 我心中的MySQL DBA
原文网址链接:http://wangwei007.blog.51cto.com/68019/1718311 MySQL是一个跨平台的开源关系型数据库管理系统,目前MySQL被广泛地应用在Interne ...
- PostgreSQL-角色、库、模式、表
由于不了解postgresql的psql工具,安装完数据库后就直接用pgadmin或navicat来连接操作,在确认初始化后的库中默认有些什么东西后竟然一直无处下手,在还没有了解pg大致体系的情况下搞 ...
- Windows下FFmpeg各版本库文件下载
ffmpeg主要是基于linux开发,当然它也支持windows,不过并不支持visual studio系列IDE(因为它使用了大量C99特性,而vs不支持C99). 要想在windows上使用 一可 ...
- 利用varnish做Discuz论坛的缓存服务器
实验背景:公司有一台BBS服务器,用的是LNMP的架构搭建的.正好手头有一台空闲的虚拟机,于是想着给BBS前端加一台缓存服务器.于是选定了varnish,搜了很多教程,跌跌撞撞的完成了配置.这其中很多 ...
- 更改CentOS7的yum更新源
1. 备份现有源: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2.下载163源 wget h ...
- java设计模式之原型模式
原型模式概念 该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.java中复制通过clone()实现的.clone中涉及深.浅复制.深.浅复制的概念如下: ⑴浅复制 ...