hibernate 修改数据时,修改前的值与修改中的值的比较

问题描述

我现在要对某条记录进行修改,在Serivce中,从action中传递过来了记录的实体,如代码:public void saveResource(Resc resource) {//要进行分开,A->是新增资源,B->修改资源 两种情况在刷新缓存情况不同boolean isNew = (resource.getResourceId() == null);String path = "";resourceDao.getSession().clear();resourceDao.save(resource);if(!isNew){Resc resc = resourceDao.get(resource.getResourceId());path = resc.getPath();resourceDao.getSession().evict(resc);} }此处我想把数据表中要修改的记录中path这个字段值与正要修改的页面上传递过来的resource.getPath()进行比较但是我得到的两个值都是相同的.其中数据表中的值与页面上的值不同,但是通过我的取值却是相同的,我该怎么处理?如果resourceDao.getSession.evict(resource)取到的值到是不同了,但是我后面要用到resource中的roles集合,如果evict了会报异常 问题补充:congjl2002 写道

解决方案

其实解决问题的根本在于对get、evict、clear方法的理解,如果掌握了这几个方法与缓存之间的关系,再结合业务逻辑,很容易就能找到解决办法。
解决方案二:
你这样又重新查一遍,有意义吗,直接从界面传会一个值不就可以了吗
解决方案三:
我有点没看懂,为啥先把resource的path值拿出来,然后再把resource整个保存到数据库里,之后调用get方法再把resource拿出来,最后把path值作比较,这中间就只有一个resource对象啊。为啥要调用save呢?如果要比较两个path,可以在save之前把数据库里面的path拿出来呀。然后再比较啊,正常逻辑不是这样么?
解决方案四:
这样的话就只能通过另一个变量传回来了
解决方案五:
我觉得你这个很有问题,你都已经执行了resourceDao.save(resource); 然后再去查,怎么可能会不一样?这个改一下试试public void saveResource(Resc resource) { //要进行分开,A->是新增资源,B->修改资源 两种情况在刷新缓存情况不同 boolean isNew = (resource.getResourceId() == null); String pathA = resource.getPath(); String pathB = ""; resourceDao.getSession().clear(); resourceDao.save(resource); if(!isNew){ Resc resc = resourceDao.get(resource.getResourceId()); pathB = resc.getPath(); resourceDao.getSession().evict(resc); } }

时间: 2024-11-01 09:12:47

hibernate 修改数据时,修改前的值与修改中的值的比较的相关文章

编程-VFP 更新表数据时自动把系统时间写入表中指定一列插入 如何实现自动写入数据

问题描述 VFP 更新表数据时自动把系统时间写入表中指定一列插入 如何实现自动写入数据 VFP编程 现有 成绩 用户 两表 成绩表 三列 成绩 修改时间 用户 用户表 两列 用户名 密码 其中插入与更新成绩后,自动提取系统时间 写入 "修改时间列"( 包含年月日的时间 ) 并且根据系统登录的用户,将用户名写入成绩表 用户列 修改时间以及 用户 这两列只能通过程序自动写入 不可以人为写入 现有两表 教师 用户 如何实现插入教师表中教师号一列的数据后 自动将数据插入到用户表中 用户名列 用

在点击dataGridview 控件中的数据时,如何显示在文本框中?

问题描述 在点击dataGridview控件中的数据时,如何显示在文本框中? 解决方案 解决方案二:在cellclik事件中把只取出来传给TextBox就行了privatevoiddataGridView1_CellClick(objectsender,DataGridViewCellEventArgse){TextBox1.Text=this.dataGridView1.Rows[1].Cells[1].Value.ToString().Trim();} 解决方案三:privatevoidda

IOS,在使用FMDB的查询时能不能通过确认某UITextfiled中的值来实现查询功能,新手求指教

问题描述 IOS,在使用FMDB的查询时能不能通过确认某UITextfiled中的值来实现查询功能,新手求指教 就是将UITextfiled中的值作为条件来实现查询,感谢,求讲解,求代码,求实例 解决方案 当然可以. 你先得到UITextField中的值,然后配置条件 NSString *searchString = @"larry"; NSString *likeParameter = [NSString stringWithFormat:@"%%%@%%", s

通过视图修改数据时所应掌握的基本准则

假如不使用INSTEAD OF触发器或可更新分区视图而是通过视图来修改数据,那么再修改之前,请考虑下列准则: ◆如果在视图定义中使用了 WITH CHECK OPTION 子句,则所有在视图上执行的数据修改语句都必须符合定义视图的 SELECT 语句中所设定的条件.如果使用了 WITH CHECK OPTION 子句,修改行时需注意不让它们在修改完成后从视图中消失.任何可能导致行消失的修改都会被取消,并显示错误信息. ◆SQL Server 必须能够明确地解析对视图所引用基表中的特定行所做的修改

c# 设置dropdownlist中的值为数据库中的值

问题描述 从数据库中查询到的数据如下:(第一行是字段名,第二行是数据)mid_quality中我的dropdownlist控件静态绑定的是:高,中,低现在我想在运行时,让dropdownlist中为"中"的值,显示在dropdownlist中如何处理呢? 解决方案 解决方案二:dropdownlist的数据源等于dtdt等于你数据库里取出来的信息就行了解决方案三:绑定就行了解决方案四:DataTabledt=newDataTable();dt=mydatabind();//取出你要的数

如何判断是修改页面时,有数据传入时,文本框的值不能改变?

问题描述 如图这是修改界面,售卡金额为10000但是当选择卡类型的时候,他的售卡金额就发生了变化如图,因为这是添加页面时,选择卡的类型他的售卡金额随之改变,但是,修改页面中我设置的售卡金额是文本框是只读的,不允许改变,我该怎么判断然后不传值!$("#Card_Money").attr("disabled","false")$("#Card_Money").val(json.data.CardMoney);这是修改界面的读值的方

批量修改数据 要根据主键Id 批量修改字段Value的值 且 value 的值是不一样。

问题描述 解决方案 解决方案二:value值和主键值什么关系,如果没关系,就用主键值+1解决方案三:updateStoreInfosetValue=Id所有的value就执行为对应的id了,如果id是要自己设置的话,循环执行sql就可以了.解决方案四:没说到底value的值是啥,光说不一样?解决方案五:引用3楼Z65443344的回复: 没说到底value的值是啥,光说不一样? Value的值是客户端传过来的Id也是....解决方案六:引用1楼bdmh的回复: value值和主键值什么关系,如果

关于hibernate删除数据时出现的异常问题!

问题描述 各位大侠.小弟最近做个应用,我在页面进行数据删除的时候出了一些问题,希望各位帮忙看看! 具体情况:我的应用是基于struts2+spring2.5+hibernate3.2.我的数据库表是通过hibernate生成的,在映射文件上做了相关的关联映射.一个目录表(category),一个文章表(article).一个目录对应多个文章.我在页面上测试删除目录的时候发现我删除那些还未发布文章的目录可以删除成功,删除已经有文章的目录不成功(意料之内).奇怪的地方出来了,当我先删除有文章的目录不

insert into向access插入数据时,字段名(也就是列的名字)之间有空格,去掉空格,就可以

问题描述 insert into向access插入数据时,字段名(也就是列的名字)之间有空格,去掉空格,就可以 insert into test(Image Name) values ('1233424.tif') 提示是语法错误,问题在Image Name,去掉空格就对,这是为什么??? 解决方案 如果字段名一定要包含空格的话,可以给这一字段加中括号即可正常插入. insert into 表1([Image Name]) values('1233424.tif') 解决方案二: 包含特殊字符的