解决一个延迟删除的问题

问题描述

背景:比如我要删除Person的一个对象。但是Person关联了其他表。主表,在hibernate中表示为一的一段。因为数据有关联的,不能删除成功,但不能报错。我分析了执行过程,因为执行了delete方法之后没有马上发出sql语句,不会报出异常,返回了true。当延迟到展示层的时候,才发出sql。hibernate的工具类。使用filter来管理事务的关闭和开启和session的关闭public boolean delete (Object object){boolean result = false;session = getSession();try{session.delete(object);result = true;}catch(Exception e){e.printStackTrace();log.error("HibernateUtil.delete( )", e);return false;}return result;}Action类伪代码Person person = hibernate.findPersonById(2);if(hibernate.delete(person)){ out.print("成功")}else{ out.print("失败")}此时,person是有关联的。在数据库工具中直接执行sql会报错。但在这里不会报错。调试的执行过程如下、在Action中,代用delete方法,进入delete方法,执行session.delete(object),没有发出sql,返回了true。那么action中就执行了 out.print("成功")。然后再出发sql。以上结果方法是。查询到person。然后判断person是否有关联。然后再决定是否删除。规定不能采用级联Set roles =person.getRoles(); if(roles.isEmploy){ if(hibernate.delete(person)) out.print("成功") else out.print("失败")}这并不是一个好的办法可是有的时候在编写的过程中忘记判断是否有关联。以上的问题怎么解决呢?我想在执行delete的时候,就提示有关联。前提是,使用filter管理事务,不采用jdbc。

解决方案

解决办法有很多。你可以再删除的完毕的时候 手动调用boolean result = false; session = getSession(); try{ session.delete(object); session.flush(); //刷新缓存,发出SQL 这样数据库如果有主外键就报异常了 result = true; }catch(Exception e){ e.printStackTrace(); log.error("HibernateUtil.delete( )", e); return false; } return result; 第二种可以使用Spring的AOP来管理事务,即把事物控制在某一层,比如把事物控制在public boolean delete (Object object) 这个方法所在的层这样当delete方法执行完毕以后会自动提交事物.然后再结合楼主的filter来关闭session 以确保延迟加载等功能。

时间: 2024-12-23 14:40:00

解决一个延迟删除的问题的相关文章

跪求大神帮忙解决一个java问题

问题描述 跪求大神帮忙解决一个java问题 Invalid classpath publish/export dependency com.genuitec.runtime.library/com.genuitec.generic_6.0. The associated classpath container cannot be included in the published/exported module. 这个问题到底是啥意思,困扰一天了 解决方案 解决: 不要动eclipse.在控制台

遍历-求一个批处理删除文件

问题描述 求一个批处理删除文件 遍历当前目录下的所有子文件夹,如果子文件夹中不包含特定后缀名的文件则删除该文件夹. 解决方案 for /f "delims=" %%i in ('dir /b/a-d/s %DestPath%') do ( if not exist %%i*.后缀 rd %%i ) 解决方案二: 选中第一个要删除的文件并按住ctrl键选中最后一个要删除的文件,单击enter键,就删除了. 解决方案三: 怎么会有这种需求的呢,用JS不行吗,用FSO不行吗! 解决方案四:

框架-这么大一个论坛,就没有一个牛人能解决一个hibernate+spring+springmvc问题吗

问题描述 这么大一个论坛,就没有一个牛人能解决一个hibernate+spring+springmvc问题吗 就是我用hibernate+spring+springmvc搭建了一个框架,在执行增删改查时(用hql语句),只有查询和新增可以,修改和删除不报错,也不执行成功...但是用sql语句就可以执行修改和删除操作. 解决方案 请检查你的事务配置 如果还不能解决问题,请贴出控制事务代码块 解决方案二: 如果用sql能执行修改和删除操作.那就是你的spring事务没有提交导致的你试试 commit

完美解决python遍历删除字典里值为空的元素报错问题_python

exam = { 'math': '95', 'eng': '96', 'chn': '90', 'phy': '', 'chem': '' } 使用下列遍历的方法删除: 1. for e in exam: 2. if exam[e] == '': 3. del exam[e] 结果出现下列错误,怎么解决: Traceback (most recent call last): File "Untitled.py", line 3, in <module> for e in

解决ReSharper自动删除换行

使用Devexpress+ReSharper进行开发,似乎是C/S开发的最佳搭配. 但在ReSharper使用时,发现一个非常烦人的问题:即按F5进行调试时,自动删除换行,这样不仅把代码搞乱了,而且有可能造成语法错误编译不通过的情况.例如: 原本的代码是: //列名 public string ColName { get; set; } F5进行调试后会出现: //列名public string ColName { get; set; } 网上已说了,是因为Devexpress+ReSharpe

android-在一个连接选择器中似乎不能解决一个语法错误

问题描述 在一个连接选择器中似乎不能解决一个语法错误 大家好,我在一行代码中得到了一个语法错误,而且我找不到错误在哪.我学android的时间不长但是我很确定我是完全按照例子来的但是仍然不能避免这个错误.代码是写一个连接选择器,所以我可以用一段代码来写一个edittext然后用一个流媒体协议发送一个图片给哪个数字.我已经在我得到错误的地方做了标记,但是因为这个错误没有解决,我仍然不能得到我想要的效果. break;case R.id.contact: Intent k = new Intent(

解决页面延迟的两个方法

玩网游游戏的朋友都知道,延迟是个很讨厌的东西,他会让你死了都不知道是怎么死的.做网站也是如此.下面介绍解决页面延迟的两个方法: 一. <% Response.Buffer = True %> <% ' Setup the variables necessary to accomplish the task Dim TimerStart, TimerEnd, TimerNow, TimerWait ' How many seconds do you want them to wait...

解决一个.NET联接SQL的问题 yiyang(转贴)

解决一个.NET联接SQL的问题    yiyang(转贴)    关键字     .NET   出处     http://Ouynagouyang    Imports System.DataImports System.Data.SqlClientImports System.Data.SqlClient.SqlExceptionPublic Class connect    Private s As String    Private s1 As String    Public Con

一个可以删除字符串中HTML标记的PHP函数

一个可以删除字符串中HTML标记的PHP函数作者:limote 当访客留言和发帖时,我们并不希望访客在留言和帖子中使用HTML标记,所以在访客提交留言和帖子时我门得把HTML标记删除,下面的函数就是实现此功能的函数 <? function delete_htm($scr) { for($i=0;$i<strlen($scr);$i++) { if(substr($scr,$i,1)=="<") { while(substr($scr,$i,1)!=">