您的位置:首页 > 编程语言 > Java开发

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中提供了管理事务的机制。具体的方法请参考其他文献
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息