hibernate中update带来的苦恼
来源:互联网 发布:知轩藏书盗墓笔记 编辑:程序博客网 时间:2024/06/14 23:15
这两天lz一直忙着做系统的数据的修改功能,今天遇到了一个问题跟大家分享下。
lz是根据主键id通过hibernate获取这个对象的属性,修改功能嘛,肯定得set某些属性,因为调用接口失败就直接返回了,还没到执行update的那行代码,但lz一看控制台 吓尿了 打出了update *** set *** where id=**,一开始lz检查代码是不是某些地方级联了update方法,发现不对,请教了经验丰富的同事,也没发现问题,lz就开始怀疑是不是hibernate机制,如果查询出这个对象,修改了属性,就算没执行update但是它会默认帮你执行。后来通过百度证实了lz的猜想。原来是hibernate三种状态在作怪,lz一想 以前好像分享过类似的文章,当时都没仔细看过,顿时那个后悔啊 。
lz先解释下是什么原因吧,hibernate通过get等方法获取的对象是持久态的,当你set方法改变属性后,不管你后来有没update,事务一结束,它会跟数据库里的对象进行比较,如果有修改就会执行update语句。有两种解决办法 第一种就是把获取的持久化对象转换成游离态,这样hibernate就不会帮你update了。通过sessionFactory.getCurrentSession().evict(object); 就可以了,可是lz的项目里所以的crud方法都是基础core封装好的,无法直接修改。第二种方法就是用merge();新建一个对象(临时态),把需要修改的对象的主键set到这个新建的对象中,这样当你merge这个新对象是会把这个对象和库的比较,如果属性一样就不变,不然就会执行update语句。这样就解决了lz的问题。
- hibernate中update带来的苦恼
- Hibernate中Update的使用
- Hibernate中update与saveOrUpdate的区别
- hibernate中update与saveOrUpdate的区别
- hibernate中update与saveOrUpdate的区别
- 有关hibernate中update方法的问题
- Hibernate中update与saveOrUpdate的区别
- hibernate中update和merge的区别
- Hibernate中更新数据的update方法
- hibernate中update和saveOrUpdate的区别
- hibernate 中hql 的delete和update
- Hibernate中update方法的注意点
- Hibernate中update()和merge()的区别
- Hibernate中update详解
- hibernate中update设置
- Hibernate的dynamic-update
- Hibernate的update建表
- hibernate中merge的使用以及与update的区别
- mac 显示需要安装旧的java SE 6 运行环境才能打开“Minecraft”
- java web服务器搭建---------jdk+tomcat
- Linux安装jdk出现java/lang/NoClassDefFoundError
- 单例模式总结
- SCU 4429 frog's dice (二分匹配 or 网络流)
- hibernate中update带来的苦恼
- 电信141p51第16题
- 对象序列化和反序列化
- C# 进制转换
- 中断和中断程序(续!)
- POJ 1279 Art Gallery 半平面交+求多边形核的面积
- java自学笔记————内部类几种类型;
- 欢迎使用CSDN-markdown编辑器
- 新闻客户端代码解析