日期:2014-05-18  浏览次数:20651 次

hibernate插入,删除数据后的奇怪问题
我做了一个hibernate分页及添加删除更新操作的模块。在使用hibernate插入数据后,数据库表里面已经增加了该记录,但是当我多次按刷新分页页面后,这条刚插入的记录有时候出现,有时候又消失了。
  在使用hibernate删除数据后,数据库表里面也已经删除了该记录,当我多次按刷新分页页面后,这条刚删除的记录有时候又会出现。
  我用((Integer) session.createSQLQuery(query).iterate().next()).intValue();,或者jdbc的方法获取并打印总的记录数,(按刷新后打印出来的数据)有时候是正确的,有时候是删除/添加以前的总的记录数。
  郁闷...

  还请各位老师帮忙指点迷津,感激不尽。

------解决方案--------------------
不知道你是用什么方法得到记录显示在页面的,hibernate有时候在查询时,是先查询在缓存中的数据的。
也就是说,即使你在数据表中删除了,但缓存里是原来的数据的话,它是先从缓存中取数据而不是从数据库。
没有代码,只能说说大概意思,自己去查查看。
------解决方案--------------------
这一定是因为hibernate缓存引起的。

hibernate会把你的hql语句缓存起来。如果你以后的操作中有和缓存过的hql语句相同。

而且之前没有做过数据库修改,那么hibernate会直接把上次的结果返回给用户。

我觉得可能是因为hibernate在判断数据库是否修改的时候出现了什么问题。

具体什么问题,我就不清楚了。当你连续刷新的时候你可能调用了另一个session这个session没有判断出你的数据库已经

被修改过。(只是可能。)hibernate的缓存技术挺复杂的。我具体也不太清楚了。你再测试一下看看把。

还有就是看看后台有没有报错
------解决方案--------------------
一次HIBERNATE操作完后,要关闭HIBERNATE SESSION,看看时不是这个问题
------解决方案--------------------
我不知道问题所在,但是HibernateSessionFactory是得你调用closeSession()方法关闭session的。。。
------解决方案--------------------
没有方法能自动关闭session,除非你调用了close方法,或者你调用的函数封装了这个方法
------解决方案--------------------
应该只能是手动关闭,应该是半自动的