相信学过数据库基础的童鞋们都知道,当有两个表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鑫与 - 博客园相关推荐

  1. java 雷达反射面积_毫米波雷达 - Magnum Programm Life - 博客园

    微波是通信和雷达使用的主要频段, 300Mhz ~ 300GHz.  毫米波是微波的一个子频段. 可见光,红外,激光, 由于频率不同和微波的特性有很大差异. 不同频段的电磁波在 "反射, 吸 ...

  2. java锚点_定位与锚点 - strongerPian - 博客园

    文档流: 普通流:上至下,左至右 浮动流:元素添加了float:: 定位流:添加了定位属性 定位 position:; static 默认值 absolute 绝对定位(脱离文档流,不占位:默认参考浏 ...

  3. java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计

    java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计 [源码请到资源专栏下载] 今天分享的项目是<ssm多用户博客个人网站> 该项目分为2个角色,管理员和用户. 用户可 ...

  4. webbrowser中localhost和发布的地址_发布一款android版博客园官方app

    1.前言 博客园创立于2004年1月,是一个面向开发者的知识分享社区.自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益 ...

  5. java费波拉切_面试题 - 不再犯错 - 博客园

    js的基本类型有哪些?引用类型有哪些?null和undefined的区别. 如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种) Object是引用类型嘛?引用类型和基 ...

  6. java编写某计算器控制台程序_计算器 - 进阶的憨狗 - 博客园

    源起 最近在看程杰著作的<大话设计模式>,全书以小菜和大鸟对话的形势,由浅入深的讲解程序的设计思想,影射出一个个设计模式.我之前虽然也使用过一些设计模式,但没有系统的学习.整理.总结,现从 ...

  7. mysql是大端小端_大端和小端 - HackerVirus - 博客园

    在计算机中是以字节为单位,每个地址对应一个字节,一个字节8bit.在C中,除了8bit的char以外,还有16bit的short,32位的int,64位long,当然具体要由编译器决定,可以通过siz ...

  8. 计算机属性的Java代码_java - 学计算机的人绝不认输 - 博客园

    一.指令元素 1.page指令 import session contentType buffer isTreadSafe info errorPage isErrorPage 2.include指令 ...

  9. python命令行运行模式_[Python] 命令行模式阅读博客园的博文

    1 #-*- coding:UTF-8 -*- 2 importrequests3 from lxml importetree4 importsys5 importio6 importos7 8 9 ...

最新文章

  1. android sqlite自定义函数,Android中自定义一个View的方法详解
  2. linux usb初始化
  3. 网络推广期间新站收录慢网络推广专员如何作答?
  4. math and date、ajax、画布
  5. 面向对象的用户体验设计(持续更新10.29)
  6. JAVA定义一个多边形类_如何在每个数据类别中绘制多个多边形?
  7. RHEL MRTG 系统流量监测的安装和配置
  8. C#的static,interface,virtual,abstract,override的区别用法
  9. vue element项目常见实现表格内部可编辑功能
  10. android 生命周期流程图,Android Studio ——Service的生命周期
  11. springBoot读取配置信息之Properties
  12. 找了好久的数据库mysql中文乱码问题终于解决
  13. ssm员工考勤签到请假管理系统 idea maven
  14. 2019年考研篇(2020毕业)
  15. 程序员成长的10条体会
  16. stp文件怎么变文件夹_PDPS教程之数模数据格式转换-stp文件怎么打开
  17. 微信支付后台接口开发(扫码版)
  18. Linux防火墙的关闭
  19. 手机删除文件还有救,5个不错的Android数据恢复软件
  20. 个人对宏观经济学的理解

热门文章

  1. 数字新基建指南|数据中台赋能零售创造智慧新模式
  2. ni visa pci_希捷酷玩固态520系列1TB评测:PCI-E 4.0让游戏进一步加速
  3. Java 进阶 -- 集合(一)
  4. jQuery实现简单购物车功能
  5. 当设计师、产品经理和程序猿去交友网站找女朋友
  6. 有个朋友要做眼睛手术
  7. OFFICE2003/2007/2010卸载工具
  8. 爱普生Epson TM-U120P 打印机驱动
  9. SSH私钥新格式转换
  10. 初学者应该怎么选购吉他?必须知道的几大误区与常识