SpringMVC-Hibernate关于数据更新没有持久化的问题

最近在项目中用到了Spring MVC和Hibernate,碰到了一个问题就是数据创建和查询的时候都能立刻查询到,但是在update数据的时候,并没有立即持久化到数据库。

找了很久的资料,终于解决了问题,于是把心得分享下来以飨新手。

我们先来看看Hibernate的update session的问题:持久化对象分为三种状态;分为:瞬时态、持久态、托管态;处理持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为为VO(Value Object)。当我们用Hibernate的getCurrentSession打开Session并进行数据更新操作时,此时的对象为瞬时对象或脱管对象。因此需要调用update将此瞬时对象或脱管对象转为持久对象。当转为持久对象时,Hibernate会自动对数据进行更新。如果调用更新后而没有调用session.flush()方法,此时虽然数据已经更新但是由于没有进行写入数据库,数据库的值依然还是没有改变的。因为在调用flush之前,数据是在内存中存储,并没有实时同步到数据库中。即flush是操作的持久态相关的数据,update是操作的脱管态相关的数据。

除此外我们还可以开启一个事务来管理,更新数据,必须提交事务,才会持久化到数据库中,否则就查询不到。关于Spring中提供了管理事务的机制。具体的方法请参考其他文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值