SpringMVC-Hibernate关于数据更新没有持久化的问题
2015-07-17 09:44
621 查看
最近在项目中用到了Spring MVC和Hibernate,碰到了一个问题就是数据创建和查询的时候都能立刻查询到,但是在update数据的时候,并没有立即持久化到数据库。
找了很久的资料,终于解决了问题,于是把心得分享下来以飨新手。
我们先来看看Hibernate的update session的问题:持久化对象分为三种状态;分为:瞬时态、持久态、托管态;处理持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为为VO(Value Object)。当我们用Hibernate的getCurrentSession打开Session并进行数据更新操作时,此时的对象为瞬时对象或脱管对象。因此需要调用update将此瞬时对象或脱管对象转为持久对象。当转为持久对象时,Hibernate会自动对数据进行更新。如果调用更新后而没有调用session.flush()方法,此时虽然数据已经更新但是由于没有进行写入数据库,数据库的值依然还是没有改变的。因为在调用flush之前,数据是在内存中存储,并没有实时同步到数据库中。即flush是操作的持久态相关的数据,update是操作的脱管态相关的数据。
除此外我们还可以开启一个事务来管理,更新数据,必须提交事务,才会持久化到数据库中,否则就查询不到。关于Spring中提供了管理事务的机制。具体的方法请参考其他文献
找了很久的资料,终于解决了问题,于是把心得分享下来以飨新手。
我们先来看看Hibernate的update session的问题:持久化对象分为三种状态;分为:瞬时态、持久态、托管态;处理持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为为VO(Value Object)。当我们用Hibernate的getCurrentSession打开Session并进行数据更新操作时,此时的对象为瞬时对象或脱管对象。因此需要调用update将此瞬时对象或脱管对象转为持久对象。当转为持久对象时,Hibernate会自动对数据进行更新。如果调用更新后而没有调用session.flush()方法,此时虽然数据已经更新但是由于没有进行写入数据库,数据库的值依然还是没有改变的。因为在调用flush之前,数据是在内存中存储,并没有实时同步到数据库中。即flush是操作的持久态相关的数据,update是操作的脱管态相关的数据。
除此外我们还可以开启一个事务来管理,更新数据,必须提交事务,才会持久化到数据库中,否则就查询不到。关于Spring中提供了管理事务的机制。具体的方法请参考其他文献
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询