getHibernateTemplate().saveOrUpdate(t)可以插入不能更新
来源:互联网 发布:淘宝专业删差评 编辑:程序博客网 时间:2024/05/22 15:12
我自己在测试毕业设计的时候,保存和更新使用的是同一个方法,老是更新不上去,不晓得怎么回事,没事就百度百度,GoogleGoogle
- 看看
hibernate 实体对象有三种状态
自由状态(Transient)
持久状态(Persistent)
游离状态(Detached)
关于这三种状态的区别:
P状态 即跟session实例关联了 已经有了相对应的数据库中的主键值,所以对象处于该状态save或者updata 等都直接改变数据库中的值。
而T状态跟D状态则不会直接改变数据库中的值,T状态是仅仅实例化一个VO对象而没有跟session实例进行任何关联则该对象处于自由状态,对于D对象则是由于与session实例相关的对象进行完持久化操作后关闭了session得到的对象状态,此时该对象有对应到数据库里的主键,可以与session实例相关把他由游离态转变为持久态。
注意:当一个对象处于持久态后被删除后,该对象虽然有数据库主键值,但是数据库中已经找不到与之相对应的记录,所以当一个持久态的对象在执行完delete方法后,就转入自由态而非游离态。游离态是该对象持有的主键可以对应到数据库里的一条记录。
我们把处于自由态和游离态的对象叫vo 而处于p状态的对象叫po
vo是相对独立的实体对象,在hibernate里处于非管理状态.
而po是有hibernate纳入到它的实体管理器的对象代表了与数据库中某条记录对应的hibernate实体po的变化在事务提交时将反应到实际的数据库中。
如果一个po与session实例分离那么此时它就变为一个vo。
为了避免在项目开发的过程在表示层出现po传值 .可以用Apache jakarta Commons Beanutils 的复制属性的方法。
举例说明:
Tuser user = new Tuser(); Tuser anotherUser =new Tuser(); try{ Beantils.copyProperties(anotherUser,user); System.out.println(antherUser.getName()); }catch(IllegalAccessExption e){ e.peintStackTrace(); }
我的t对象就是处于Session中,持久化状态,已经在Session中存储过了,所以继续寻找,寻到了csdn论坛上关于getHibernateTemplate().flush();的解释
这跟线程有关系,应该是spring使用是ThreadLocal ,一个线程对应一个session,可能是你在同个线程下多次调用 了update,update操作的是游离状态,而出问题的情况下应该是你的session里面已经有一个持久态的userInfo,而更新持久态是要用flush
所以flush()就是刷新缓存……
0 0
- getHibernateTemplate().saveOrUpdate(t)可以插入不能更新
- getHibernateTemplate().saveOrUpdate(t)不能更新
- getHibernateTemplate().save不能插入数据
- getHibernateTemplate().saveOrUpdate 不执行
- 在Spring使用getHibernateTemplate().save()为何不能更新数据库
- getHibernateTemplate().saveOrUpdate()和getHibernateTemplate().save()不起作用 数据库没有数据
- getHibernateTemplate().saveOrUpdate 不执行也不报错可能的原因
- t-sql实现插入,删除,更新记录
- MySQL保存或更新 saveOrUpdate
- mybatis saveOrUpdate 保存或更新
- getHibernateTemplate().save() 不能写入数据
- SqlDataAdaper 能插入不能更新。更新显示违反主键
- thinkphp 在数据库更新(save)的时候,如果字段没有被修改,会更新失败 和数据的自动验证,插入的时候可以自动验证,但更新的时候就不能验证了
- saveOrUpdate
- saveorupdate
- saveOrUpdate
- SaveOrUpdate
- saveOrUpdate
- 关键字volatile的详解
- Servlet 客户端 HTTP 请求
- 树莓派浏览器中文显示乱码问题和树莓派键盘设置
- RtlWcpDllDebugEntrypoint
- Servlet 服务器 HTTP 响应
- getHibernateTemplate().saveOrUpdate(t)可以插入不能更新
- Shell学习小结 - 深入认识变量
- MyBatis总结——加载mappers映射文件的三种方式
- Rxjava 封装异步回调代码, 新时代来临
- Servlet HTTP 状态码
- Java程序员岗位需求分析及人才标准的研究
- Servlet 编写过滤器
- 打印所有的汉字
- 1922: [Sdoi2010]大陆争霸