Hibernate的级联操作
来源:互联网 发布:欲安所归乎 编辑:程序博客网 时间:2024/05/17 23:44
一 Hibernate的级联操作
所谓级联操作就是说,当你进行某个操作(添加/修改/删除...),就由hibernate自动给你完成。
举例1:学生部门关系
Department <---->Student 对象关系,我希望当我删除一个department ,那么就自动删除该部门的所有学生。
举例2:BBS项目
主帖<---->回帖 , 把主帖删除,那我们就希望把该主帖的回帖自动删除,这样我们可以使用级联(cascade)操作。
二 案例——当删除某个部门的时候,就删除该部门的学生
1 配置文件
<?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 package="com.hsp.domain"><class name="Department" lazy="false" ><!-- 配置主键属性 --><id name="id" type="java.lang.Integer"><!-- 生成策略 --><generator class="increment"></generator></id><property name="name" type="java.lang.String"><column name="name" length="64" not-null="true"/></property><!-- 配置one-to-many关系 cascade="delete" 当删除部门的时候(主对象,则级联删除它的学生从对象)--><set name="stus" cascade="delete"><!-- 指定Student类对应的外键 --><key column="dept_id" /><one-to-many class="Student" /></set></class></hibernate-mapping>
2 测试代码
package com.hsp.view;import java.util.HashSet;import java.util.Set;import org.hibernate.Hibernate;import org.hibernate.Session;import org.hibernate.Transaction;import com.hsp.domain.Department;import com.hsp.domain.Student;import com.hsp.util.HibernateUtil;public class TestMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //通过获取一个sesion,让hibernate框架运行(config->加载hibernate.cfg.xml) Session s=null; Transaction tx=null; try { //我们使用基础模板来讲解. s=HibernateUtil.getCurrentSession(); tx=s.beginTransaction(); //演示级联删除 //获取某个部门 Department department=(Department) s.get(Department.class, 1); s.delete(department); tx.commit(); } catch (Exception e) { if(tx!=null){ tx.rollback(); } }finally{ if(s!=null && s.isOpen()){ s.close(); } }}
三 案例-演示save-update
1 配置
<?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 package="com.hsp.domain"><class name="Department" lazy="false" ><!-- 配置主键属性 --><id name="id" type="java.lang.Integer"><!-- 生成策略 --><generator class="increment"></generator></id><property name="name" type="java.lang.String"><column name="name" length="64" not-null="true"/></property><!-- 配置one-to-many关系 cascade="delete" 当删除部门的时候(主对象,则级联删除它的学生从对象)--><set name="stus" cascade="save-update"><!-- 指定Student类对应的外键 --><key column="dept_id" /><one-to-many class="Student" /></set></class></hibernate-mapping>
2 测试代码
package com.hsp.view;import java.util.HashSet;import java.util.Set;import org.hibernate.Hibernate;import org.hibernate.Session;import org.hibernate.Transaction;import com.hsp.domain.Department;import com.hsp.domain.Student;import com.hsp.util.HibernateUtil;public class TestMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //通过获取一个sesion,让hibernate框架运行(config->加载hibernate.cfg.xml) Session s=null; Transaction tx=null; try { //我们使用基础模板来讲解. s=HibernateUtil.getCurrentSession(); tx=s.beginTransaction(); Department department=new Department(); department.setName("业务部门1"); Student stu1=new Student(); stu1.setName("顺平1"); Student stu2=new Student(); stu2.setName("小明1"); Set sets=new HashSet<Student>(); sets.add(stu1); sets.add(stu2); department.setStus(sets); s.save(department); tx.commit(); } catch (Exception e) { if(tx!=null){ tx.rollback(); } }finally{ if(s!=null && s.isOpen()){ s.close(); } }}
3 测试结果
Hibernate: select max(id) from Department
Hibernate: select max(id) from Student
Hibernate: insert into Department (name, id) values (?, ?)
Hibernate: insert into Student (name, dept_id, id) values (?, ?, ?)
Hibernate: insert into Student (name, dept_id, id) values (?, ?, ?)
Hibernate: update Student set dept_id=? where id=?
Hibernate: update Student set dept_id=? where id=?
四 说明
① 在集合属性和普通属性中都能使用cascade
② 一般讲cascade配置在one-to-many(one的一方,比如Employee-Department),和one-to-one(主对象一方)
阅读全文
0 0
- hibernate的级联操作
- hibernate的级联操作
- hibernate的级联操作
- Hibernate的级联操作
- Hibernate的级联操作
- 使用hibernate的级联操作
- hibernate的级联操作cascade
- hibernate的级联操作异常
- hibernate 的级联操作 cascade操作
- Hibernate持久化对象的级联操作
- Hibernate的Cascade——级联操作
- Hibernate的级联操作详解(转)
- 12-hibernate关联关系的级联操作
- Hibernate的一对多增改级联操作
- hibernate的抓取和级联操作
- 关于hibernate中级联操作的感慨
- Hibernate的检索方式、级联操作、批处理
- HIBERNATE中级联操作
- 创建内联样式表
- 微信小程序从入门到放弃(七)
- String -compareTo()方法
- kafka踩到的坑:kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
- xpath get element ------------method and exception---------frame
- Hibernate的级联操作
- .NET
- 8张图理解Java
- 【FreeMarker学习】FreeMarker中If、List使用
- BZOJ1083(SCOI2005)[繁忙的都市]--最小生成树
- 41. First Missing Positive
- HDU 1026 Ignatius and the Princess I
- android 6.0动态权限申请以及拒绝后的控制
- 任意位置进入jupyter