级联操作

所谓级联操作就是说,当你进行主对象某个操作时,从对象hibernate自动完成相应操作。

比如: Department <---->Student 对象关系,我希望当我删除一个department ,那么就自动删除该部门的所有学生。

再比如: bbs项目主帖<---->回帖 , 把主帖删除,那我们就希望把该主帖的回帖自动删除,这样我们可以使用级联(cascade)操作。

案例:如何配置级联操作,当删除某个部门的时候,我们自动删除其学生.

首先我们在配置文件中修改:

<!-- 配置one-to-many关系cascade="delete" 当删除该部门的时候(主对象,则级联删除它的学生从对象) -->

<set name="stus" cascade="delete">

<!-- 指定Student类对应的外键 -->

<key column="dept_id" />

<one-to-many class="Student" />

</set>

java代码中操作:

Department department=new Department();

department.setName("业务部门");

Student stu1=new Student();

stu1.setName("小红") ;

stu1.setDept(department);

Student stu2=new Student();

stu2.setName("小明");

stu2.setDept(department);

session.save(department);

session.save(stu1);

session.save(stu2);

Department department=(Department) s.get(Department.class, 41);

s.delete(department);

save-update

配置文件:

<set name="stus" cascade="save-update">

<!-- 指定Student类对应的外键 -->

<key column="dept_id" />

<one-to-many class="Student" />

</set>

java代码:

1.Department department=new Department();

department.setName("业务部门");

Student stu1=new Student();

stu1.setName("小红");

stu1.setDept(department);

Student stu2=new Student();

stu2.setName("小明");

stu2.setDept(department);

session.save(department);

虽然设置了级联操作,但是这种情况下是只会保存部门的,因为没有设置从部门到学生的反向外键引用。

可是如果在学生这边设置级联操作(学生是持有部门的外键引用的),当保存学生时,就可以将部门一并保存

当还是从部门这边做操作时,要改成下面操作才行:

2.Department department=new Department();

department.setName("业务部门3");

Student stu1=new Student();

stu1.setName("小红");

Student stu2=new Student();

stu2.setName("小明");

Set<Student> students=new HashSet<Student>();

students.add(stu1);

students.add(stu2);

department.setStus(students);                 //明确使用集合关系保存

s.save(department);

说明:

① 在集合属性和普通属性中都能使用cascade

② 一般讲cascade配置在one-to-many(one的一方,比如Employee-Department),和one-to-one(主对象一方)

struts+hibernate+接口编程

案例:留言本

这是韩顺平老师所讲hibernate案例中的一张框架图。从上往下分别是web层、业务层、dao层、hibernate层、数据库层。

在这个地方重点要学习是这个框架中的接口编程的方式,关注程序设计结构

在框架中接口使得web层和业务层达到解耦的目的。在接口中声明方法,在业务层中将其方法实现,可是在业务层中实现的方法可能需要改变,

为了在web层中保持代码的不变性,在web层我们使用接口调用方法即可,

UsersServiceInter  usersServiceInter=new UsersServiceImp();

而在我们学习使用Spring后,可以通过xml文件配置方法的方式配置 UsersServiceImp()即可,这样解耦性更高了。

还有就是定义基础接口和基础实现类。因为在MessageServiceInter和UserServiceInter中可能有公共的方法,为了增强代码的复用性,添加一个

基础接口,而只在MessageServiceInter和UserServiceInter定义自己的特有方法。同时BaseServiceImpl是一个抽象类,它可以不完全实现

BaseServiceInter中的方法,因为有些方法都需要它的继承者各自独特实现而不定义统一方法实现

Hibernate(八)__级联操作、struts+hibernate+接口编程架构的更多相关文章

  1. [原创]关于Hibernate中的级联操作以及懒加载

    Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...

  2. Hibernate的Cascade——级联操作

    在Hibernate中,针对持久化实体的配置文件中有Cascade这样一个属性,顾名思义就是级联,也就是说在操作当 前实体时,针对当前实体的操作会影响到相应配置的关联实体.比如针对当前实体进行保存操作 ...

  3. Mybatis接口编程原理分析(二)

    在上一篇博客中 Mybatis接口编程原理分析(一)中我们介绍了MapperProxyFactory和MapperProxy,接下来我们要介绍的是MapperMethod MapperMethod:它 ...

  4. Hibernate级联操作 注解

    EJB3 支持的操作类型 /** * Cascade types (can override default EJB3 cascades */ public enum CascadeType { AL ...

  5. hibernate的中的查询与级联操作

    1.Criteria查询接口适用于组合多个限制条件来搜索一个查询集. 要使用Criteria,需要遵循以下步骤: *创建查询接口: Criteria criteria=session.createCr ...

  6. Java三大框架之——Hibernate关联映射与级联操作

    什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...

  7. Hibernate(三)__核心接口和类

    该图显示了核心接口类以及配置文件的关系层次,越往下越偏向底层数据库. 1. hibernate.cfg.xml文件 ①该文件主要用于指定各个参数,是hibernate核心文件 ②默认放在src目录下, ...

  8. Hibernate级联操作和载入机制(二) cascade and fetch

    上一篇介绍了Hibernate持久化对象时候的级联操作.本篇介绍读取时候的级联操作. 还是用上一篇的样例.一份问卷有多个问题.可是每一个问题仅仅能属于一份问卷. 我们先看測试用例: @Test pub ...

  9. Hibernate级联操作解密(inverse和cascade)

    总结: Cascade:对级联操作进行限制,有如下几个参数: all : 所有情况下均进行关联操作.  none:所有情况下均不进行关联操作.这是默认值.  save-update:在执行save/u ...

随机推荐

  1. DELPHI支付宝支付代码

    真实业务场景的考虑 按照支付宝或者微信支付的开发手册的说法,一个标准的客户端接入支付业务模型应该是这样的,我忽略时序图,只用文字描述: 用户登录客户端,选择商品,然后点击客户端支付. 客户端收集商品信 ...

  2. 在Windows平台上安装Node.js及NPM模块管理

    1. 下载Node.js官方Windows版程序:http://nodejs.org/#download    从0.6.1开始,Node.js在Windows平台上提供了两种安装方式,一是.MSI安 ...

  3. 如何利用Direct NFS克隆数据库

    CloneDB是Oracle 11.2.0.3推出的一项新特性,它利用的了11g新引入的Direct NFS.它直接利用目标数据库的备份,无需将备份COPY到克隆环境下,使得一个备份可以克隆多个不同用 ...

  4. Android自动连接指定的wifi,免密码或指定密码

    一.运行时的状态 遇到一个这样的要求:“不进行扫描操作,怎么对指定的免密码WIFI进行连接(之前没有连接过)”,于是动手写了一个Demo,如图所示未连接成功时的状态,第一个编辑框让用户输入SSID,第 ...

  5. PHP学习总结(一)

    对最近学习PHP做个简单的总结吧 书籍:<PHP和MySQL Web开发> 环境/工具:wamp/Editplus&Chrome 时间:8月2日-8月7日 内容: 以前把前3章学了 ...

  6. 【Java基础】序列化与反序列化深入分析

    一.前言 复习Java基础知识点的序列化与反序列化过程,整理了如下学习笔记. 二.为什么需要序列化与反序列化 程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终 ...

  7. 每日学习总结<一> 2015-8-31

      Java : 抽象类的简单概念和意义: 包名:域名相反.例: com.eric.test; 访问权限: (public/default/private/protected) public: 可以修 ...

  8. SQL Server 2014新特性——基数评估(白皮书阅读笔记)

    基数评估 目录 基数评估 说明 基数评估准确的重要性 模型假设 启用新的基数评估 验证基数评估的版本 在迁移到新的基数评估前要测试 校验基数评估 偏差问题 需要手动处理的变化 避免因为新的CE造成性能 ...

  9. jQuery 3.1 API中文文档

    jQuery 3.1 API中文文档 一.核心 1.1 核心函数 jQuery([selector,[context]]) 接收一个包含 CSS 选择器的字符串,然后用这个字符串去匹配一组元素. jQ ...

  10. LeetCode - 51. N-Queens

    51. N-Queens Problem's Link ------------------------------------------------------------------------ ...