java 级联删除_级联删除 - Asher鑫与 - 博客园
相信学过数据库基础的童鞋们都知道,当有两个表A和B,表A的外键正是表B的主键时,我们会发现,当我们用数据库语言对B表数据进行删除操作的时候,我们会发现根本就删除不了,所以呢,在实际代码中,想要通过点击删除就可以删除?那么就需要对其进行相关操作了,具体的呢,咱就一步一步来,我所写的是通过spring3+hibernate4+struts2+maven写的代码,里面有两个表department 和user,其department的主键did在user中作为外键,这时候就必然会在department.hbm.xml中配置多对多的关系,如下代码:
//cascade参数不要掉
因为是通过spring的管理,所以在spring.xml中sessionfactory和transactionmanage的配置都要记得,具体代码如下:
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
${hibernate.hbm2ddl.auto}
${hibernate.dialect}
${hibernate.show_sql}
${hibernate.format_sql}
com/cct/entity/Department.hbm.xml
com/cct/entity/User.hbm.xml
com/cct/entity/Post.hbm.xml
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
以上代码中,记得后面的对于transactionManager的处理(tx:开头的和aop:开头)一定不能掉了,在这部分进行了开启事务管理,如果掉了的话就会报错:No Session found for current thread,当然,除此之外,在写Dao层的时候,也需要注意的是,如果用的是hibernate3,则可以通过继承HibernateDaoSupport来通过hibernatetemplate来进行增删改查操作,当然也是不需要写transaction的开启和提交类似的语句的,如果是hibernate4的话,就需要在Dao中写下下面代码:
@Resource
private SessionFactory sessionFactory ;
通过spring注解特性,用@Resource对sessionfactory进行注入,这样的话在dao层的每个方法中通过sessionfactory.getCurrentSession.*()就可以直接进行增删改查操作,接下来关键的时候到了,那就是在删除操作中,需要进行判断,通过判断departmentservice传过来的参数DeleMode(这个是提前在单独类中定义一些静态变量)来做删除前的解除关系操作,解除关系之后就可以正常删除:
public voiddeleteDepartmentByID(Serializable id,String deletemode) {
Department departement=this.getDepartmentbyId(id);if("del".equals(deletemode))
{
sessionFactory.getCurrentSession().delete(departement);
}else if("del_pre_release".equals(deletemode))//删除之前先解除关系
{
Set departments=departement.getUsers();for(User user:departments)
{
user.setDepartment(null);
}
}else{//级联删除
}
sessionFactory.getCurrentSession().delete(departement);
}
这样的操作应该是比较常见的,所以有些问题需要注意一下。
java 级联删除_级联删除 - Asher鑫与 - 博客园相关推荐
- java 雷达反射面积_毫米波雷达 - Magnum Programm Life - 博客园
微波是通信和雷达使用的主要频段, 300Mhz ~ 300GHz. 毫米波是微波的一个子频段. 可见光,红外,激光, 由于频率不同和微波的特性有很大差异. 不同频段的电磁波在 "反射, 吸 ...
- java锚点_定位与锚点 - strongerPian - 博客园
文档流: 普通流:上至下,左至右 浮动流:元素添加了float:: 定位流:添加了定位属性 定位 position:; static 默认值 absolute 绝对定位(脱离文档流,不占位:默认参考浏 ...
- java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计
java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计 [源码请到资源专栏下载] 今天分享的项目是<ssm多用户博客个人网站> 该项目分为2个角色,管理员和用户. 用户可 ...
- webbrowser中localhost和发布的地址_发布一款android版博客园官方app
1.前言 博客园创立于2004年1月,是一个面向开发者的知识分享社区.自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益 ...
- java费波拉切_面试题 - 不再犯错 - 博客园
js的基本类型有哪些?引用类型有哪些?null和undefined的区别. 如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种) Object是引用类型嘛?引用类型和基 ...
- java编写某计算器控制台程序_计算器 - 进阶的憨狗 - 博客园
源起 最近在看程杰著作的<大话设计模式>,全书以小菜和大鸟对话的形势,由浅入深的讲解程序的设计思想,影射出一个个设计模式.我之前虽然也使用过一些设计模式,但没有系统的学习.整理.总结,现从 ...
- mysql是大端小端_大端和小端 - HackerVirus - 博客园
在计算机中是以字节为单位,每个地址对应一个字节,一个字节8bit.在C中,除了8bit的char以外,还有16bit的short,32位的int,64位long,当然具体要由编译器决定,可以通过siz ...
- 计算机属性的Java代码_java - 学计算机的人绝不认输 - 博客园
一.指令元素 1.page指令 import session contentType buffer isTreadSafe info errorPage isErrorPage 2.include指令 ...
- python命令行运行模式_[Python] 命令行模式阅读博客园的博文
1 #-*- coding:UTF-8 -*- 2 importrequests3 from lxml importetree4 importsys5 importio6 importos7 8 9 ...
最新文章
- android sqlite自定义函数,Android中自定义一个View的方法详解
- linux usb初始化
- 网络推广期间新站收录慢网络推广专员如何作答?
- math and date、ajax、画布
- 面向对象的用户体验设计(持续更新10.29)
- JAVA定义一个多边形类_如何在每个数据类别中绘制多个多边形?
- RHEL MRTG 系统流量监测的安装和配置
- C#的static,interface,virtual,abstract,override的区别用法
- vue element项目常见实现表格内部可编辑功能
- android 生命周期流程图,Android Studio ——Service的生命周期
- springBoot读取配置信息之Properties
- 找了好久的数据库mysql中文乱码问题终于解决
- ssm员工考勤签到请假管理系统 idea maven
- 2019年考研篇(2020毕业)
- 程序员成长的10条体会
- stp文件怎么变文件夹_PDPS教程之数模数据格式转换-stp文件怎么打开
- 微信支付后台接口开发(扫码版)
- Linux防火墙的关闭
- 手机删除文件还有救,5个不错的Android数据恢复软件
- 个人对宏观经济学的理解