级联操作

所谓级联操作就是说,当你进行主对象某个操作时,从对象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. js中NAN、NULL、undefined的区别

    NaN:保留字(表明数据类型不是数字) undefined:对象属性或方法不存在,或声明了变量但从未赋值.即当你使用了对象未定的属性或者未定义的方法时或当你声明一个变量,但你确从未对其进行赋值,便对其 ...

  2. python socket 学习

    Python在网络通讯方面功能强大,今天学习一下Socket通讯的基本方式,分别是UDP通讯和TCP通讯. UDP通讯 upd 服务端 #!/usr/bin/env python # -*- codi ...

  3. 解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析

    许可证编译器 (Lc.exe) 的作用是读取包含授权信息的文本文件,并产生一个可作为资源嵌入到公用语言运行库可执行文件中的 .licenses 文件. 在使用第三方类库时,经常会看到它自带的演示程序中 ...

  4. 【工具】CodeSmith Generator 7.0.2激活步骤

    学过三层的人应该认识CodeSmith Generator吧,今天我就跟大家一起探讨下CodeSmith Generator 7.0.2的激活,这最新版本破解的难度也是超越以往......具体看这篇日 ...

  5. 移动开发框架剖析(一) Hammer专业的手势控制

    一直在写jQuery的源码教程,都没时间研究别的框架了.Hammer是我项目御用的一个手势库,早期1.x版本的swipe事件的响应不灵敏的问题而改过源码,2.x就已经更正过来,而且源码的结构也整个翻新 ...

  6. Topology and Geometry in OpenCascade-Face

    Topology and Geometry in OpenCascade-Face eryar@163.com 摘要Abstract:本文简要介绍了几何造型中的边界表示法(BRep),并结合程序说明O ...

  7. Azure ARM (4) 开始创建ARM Resource Group并创建存储账户

    <Windows Azure Platform 系列文章目录> 好了,接下来我们开始创建Azure Resource Group. 1.我们先登录Azure New Portal,地址是: ...

  8. hadoop的概念

    hadoop的概念 网上会经常遇到各种hadoop的概念,Hive,HBase,Hdfs都各是什么呢? 首先从hdfs说起,hdfs是分布式文件系统,它把集群当作单机一样做文件操作,文件可能存在于多个 ...

  9. 绘制SVG内容到Canvas的HTML5应用

    SVG与Canvas是HTML5上绘制图形应用的两种完全不同模式的技术,两种绘制图形方式各有优缺点,但两者并非水火不容,尤其是SVG内容可直接绘制在Canvas上的功能,使得两者可以完美的融合在一起, ...

  10. 关于MYSQL数据库安装方式及相关设置简要说明

    网上关于MYSQL的教程非常多,但都不是最新的,我这里只是针对最新版本的MY SQL 的安装与设置进行一个简要的说明,大部份操作都相同. 以下是按照WINDOWS 64位操作系统+MY SQL 5.6 ...