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 ...
随机推荐
- 在数组中找出x+y+z=0的组合
就是找x+y=-z的组合 转化为找出值为-z满足x+y=-z的组合 解法一: 为了查找,首先想到排序,为了后面的二分,nlogn, 然后x+y的组合得n^2的复杂度,加上查找是否为-z,复杂度为nlo ...
- 【从零开始学习Hadoop】--1.Hadoop的安装
第1章 Hadoop的安装1. 操作系统2. Hadoop的版本3. 下载Hadoop4. 安装Java JDK5. 安装hadoop6. 安装rsync和ssh7. 启动hadoop8. 测试had ...
- PHP中require和include路径问题总结
1 绝对路径.相对路径和未确定路径 相对路径 相对路径指以.开头的路径,例如 ./a/a.php (相对当前目录) ../common.inc.php (相对上级目录), 绝对路径 绝对路径是以 / ...
- httpclient进行basic auth认证
private HttpClientContext context = HttpClientContext.create(); public void addUserOAuth(String user ...
- NOIP2013货车运输[lca&&kruskal]
题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...
- IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
IntelliJ IDEA 乱码解决方案 (项目代码.控制台等) 最近IDE从eclipse改成IntelliJ IDEA 了,原因是公司大部分人都在用这个IDE,而且一直推荐用,所以尝尝鲜.换的第一 ...
- [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...
- iOS状态栏---学习笔记六
一.设置状态栏的颜色. //1.需要在自定义导航的时候,设置顶部视图 - (UIViewController *)childViewControllerForStatusBarStyle{ retur ...
- PHP用法
链接: php编写app接口(一)-JSON方式封装接口数据方法 php 非常有用的高级函数PATH_SEPARATOR常量和set_include_path date_default_timezon ...
- 使用JSP开发动态网站基础
1. 什么是动态网页? 动态网页是指在服务器端运行的程序或者网页,它们会随不同客户.不同时间,返回不同的网页. 注意:在静态网页中插入flash ,虽然flash是在动的,但是并不是说这个网页就是动态 ...