Hibernate(八)__级联操作、struts+hibernate+接口编程架构
级联操作
所谓级联操作就是说,当你进行主对象某个操作时,从对象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+接口编程架构的更多相关文章
- [原创]关于Hibernate中的级联操作以及懒加载
Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...
- Hibernate的Cascade——级联操作
在Hibernate中,针对持久化实体的配置文件中有Cascade这样一个属性,顾名思义就是级联,也就是说在操作当 前实体时,针对当前实体的操作会影响到相应配置的关联实体.比如针对当前实体进行保存操作 ...
- Mybatis接口编程原理分析(二)
在上一篇博客中 Mybatis接口编程原理分析(一)中我们介绍了MapperProxyFactory和MapperProxy,接下来我们要介绍的是MapperMethod MapperMethod:它 ...
- Hibernate级联操作 注解
EJB3 支持的操作类型 /** * Cascade types (can override default EJB3 cascades */ public enum CascadeType { AL ...
- hibernate的中的查询与级联操作
1.Criteria查询接口适用于组合多个限制条件来搜索一个查询集. 要使用Criteria,需要遵循以下步骤: *创建查询接口: Criteria criteria=session.createCr ...
- Java三大框架之——Hibernate关联映射与级联操作
什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...
- Hibernate(三)__核心接口和类
该图显示了核心接口类以及配置文件的关系层次,越往下越偏向底层数据库. 1. hibernate.cfg.xml文件 ①该文件主要用于指定各个参数,是hibernate核心文件 ②默认放在src目录下, ...
- Hibernate级联操作和载入机制(二) cascade and fetch
上一篇介绍了Hibernate持久化对象时候的级联操作.本篇介绍读取时候的级联操作. 还是用上一篇的样例.一份问卷有多个问题.可是每一个问题仅仅能属于一份问卷. 我们先看測试用例: @Test pub ...
- Hibernate级联操作解密(inverse和cascade)
总结: Cascade:对级联操作进行限制,有如下几个参数: all : 所有情况下均进行关联操作. none:所有情况下均不进行关联操作.这是默认值. save-update:在执行save/u ...
随机推荐
- Java 线程 — ConcurrentLinkedQueue
ConcurrentLinkedQueue 在考虑并发的时候可以先考虑单线程的情况,然后再将并发的情况考虑进来. 比如ConcurrentLinkedQueue: 先考虑单线的offer 再考虑多线程 ...
- Android开发实践:编译VLC-for-android
最近在Android做流媒体相关的开发,一直想学习一下强大的VLC,正好趁此机会研究研究VLC-for-android的代码,看看优秀的开源音视频播放器是如何实现的.本文总结下在Linux平台下如何编 ...
- CSS弹性盒模型flex在布局中的应用
× 目录 [1]元素居中 [2]两端对齐 [3]底端对齐[4]输入框按钮[5]等分布局[6]自适应布局[7]悬挂布局[8]全屏布局 前面的话 前面已经详细介绍过flex弹性盒模型的基本语法和兼容写法, ...
- CSS文本方向
前面的话 一般地,正常网页文本方向都是从上到下,从左到右.实际上,有多种设置文本方向的属性,前面已经详细介绍过text-align,HTML全局属性中有一个"dir"属性就是专门用 ...
- poj2060Taxi Cab Scheme(二分图匹配)
/* 题意: 出租车 有一个出发的时间,从点(a, b)到点(c, d),时间为 abs(a-c)+abs(b-d)! 一辆车可以在运完一个乘客后运另一个乘客, 条件是此车要在预约开始前一分钟之前到达 ...
- Cocos2d-x 3.2 学习笔记(十二)TimberMan!疯狂伐木工!
学习cocos2dx有一段时间了,试着做了2048游戏,最近又发现个经典游戏,啥也不说果断开工做自己的游戏——TimberMan! 首先说明:游戏资源摘自同类游戏,感谢这些游戏的资源让我完成自己的开发 ...
- Java多线程系列--“JUC线程池”04之 线程池原理(三)
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介绍线程池的生命周期.在"Java多线程系列--“基础篇”01之 基 ...
- Java 类库和常用类库
Java 类库概念: Java 的应用程序接口 (API) 以包的形式来组织,每个包提供了大量的相关类.接口和异常处理类,这些包的集合就是 Java 的类库 包名以 Java 开始的包是 Java 核 ...
- 一个有意思的js小问题
问题:如何实现以下函数? add(2, 5); // 7 add(2)(5); // 7 第一个就不用说了,很简单,关键是看第二个,add(2)(5),可见add(2)应该返回的是一个函数,这个函数再 ...
- MySql LAST_INSERT_ID 【插入多条数据时】
LAST_INSERT_ID 自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里 The ID that was generat ...