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 ...
随机推荐
- ORA-01102: cannot mount database in EXCLUSIVE mode
安装完ORACEL 10g数据库后,启动数据库时遇到ORA-01102: cannot mount database in EXCLUSIVE mode [oracle@DB-Server ~]$ s ...
- 初识sqoop
Sqoop 产生背景 Sqoop 的产生主要源于以下几种需求: 1.多数使用 Hadoop 技术处理大数据业务的企业,有大量的数据存储在传统的关系型数据库(RDBMS)中. 2.由于缺乏工具的支持,对 ...
- WinForm常用事件
不定期更新... Load:加载窗体时引发: LocationChanged: KeyDown:一般用做快捷键例如CTRL+S,执行保存 FormClosed: 窗体关闭后,例如登陆窗体为启动窗体,关 ...
- IntelliJ IDEA 配置运行程序
IntelliJ IDEA 对于Javaer开发来说还是很nice的,就是第一次用可能配置项有点生疏,这里就记录一下IntelliJ IDEA 配置运行程序. 1. 点击Edit Config... ...
- 使用Docker快速部署Storm环境
Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择.下面是我开源的一个新的项目,一个配置好了storm与mono环境的D ...
- spring quartz定时任务
配置quartz 在spring中需要三个jar包: quartz-1.8.5.jar.commons-collections-3.2.1.jar.commons-logging-1.1.jar 首先 ...
- Centos7中systemctl命令详解
Linux Systemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syst ...
- 通过RTMP play分析FLV格式详解
最近做了一个rtmp中转服务程序,通过实践,熟悉rtmp play和push中各类格式,这里总结一下. 程序github地址: https://github.com/runner365/rtmp_re ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 聊天管道和寻路器)
又快到双十一,又是不少同仁们出血的日子,首先希望大家玩的开心.我曾经想要仔细的剖析场景的的每个组件,就像这里的聊天管道与寻路器,但是仔细阅读别人代码的时候才发现元件虽小但是实现并不简单,因为有些东西还 ...
- 用MonoDevelop开发Linux游戏
鉴于微软将放弃XNA,MonoGame将是喜欢XNA的朋友们的新选择,他是XNA游戏引擎的开源实现,而且是跨平台的,这意味着你可以用他开发OS.android.windows以及linux应用程序,多 ...