Hibernate update之后查询结果不稳定

2019-03-25 13:47|来源: 网路

在WEB 应用开发中,调用session的update(),然后提交事物,之后,数据库中的数据成功更新了,但查询数据库显示结果不稳定,一会儿显示更新之前的数据,一会儿显示更新之后的数据。
详细情况是这样的。在WEB页面中调用HIBERNATE DAO执行update来更新数据,然后用另外一个网页执行查询并显示查询结果。查询方法如下:
Query q = getSession().createQuery("from T order by idx");
List li=q.list();

一开始我用HIBERNATE自带的连接池,发先了查询结果不稳定现象,然后我换成C3P0,问题依旧。项目中我没有运用二级缓存,并且每次执行更新操作后都提交了事物commit()。
希望同仁们能帮我想想办法。在这里先谢谢大家!

相关问答

更多
  • 以Ai与Aj为例子 快速排序有两个方向,左边的i下标一直往右走,当a[i] <= a[center_index], 其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的 j下标一直往左走,当a[j] > a[center_index]。如果i和j都走不动了, i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。 交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的 时候,很有可能把前面的元素的稳定性打乱,比如序列5 3 3 ...
  • Ubuntu的桌面右上方有个网络链接的图标 你点击选择DSL连接 然后新建连接 把你的ADSL账号跟密码输入就OK了 连上猫后 点击那个“DSL连接1” 就可以连接ADSL 跟windows 的连接一样 不会掉线的
  • 很奇怪,但那是MySQL ;-) 优化器认为status = 1是一个强大的限制。 如果这种情况持续下去,你会过得去 select status=1, count(*) as num from posts group by status=1 如果表的一小部分status=1那么从mysqls的角度来看,30行解决方案仍然非常好。 如果一个大部分的status = 1那么你应该尝试查询 from posts ignore index (status) ... 要么 from posts force ind ...
  • 如果方法B中存在异常,则在方法A返回时,不应将此方法中所做的所有更改保存到DB。 不,已经在方法B中提交的更改将保持提交。 例如,如果循环中有10个步骤并且在步骤4中发生异常,则将保存在步骤1-3中所做的更改。 如果方法B中没有异常,则方法B中所做的更改将立即提交给DB,即使存在由方法A引起的父事务也是如此。 究竟 PS。 确保使用Spring调用methodB(),而不仅仅是Java调用。 最简单的方法是将methodB()放在另一个类中,与methodA()不同。 另一种方法是使用@Resource注释 ...
  • Hibernate适用于大多数具有面向对象模型的应用程序。 所以你可以问:什么时候面向对象的模型是合适的? 我会说,最大的优势是开发人员的生产力。 查询性能本身通常比手工编码查询更差,因为它无法针对每个特定情况进行优化。 休眠通过使用缓存来很好地补偿这一点。 只写(大部分)系统不能从缓存中获得太多优势,甚至可能会降低性能(应该避免使用缓存)。 这些类型的系统通常不需要面向对象的模型,他们只是将数据推送到数据库中。 Hibernate is suitable for most of the applicati ...
  • liquibase-hibernate插件的当前文档位于https://github.com/liquibase/liquibase-hibernate/wiki 它可以让你比较你的hibernate模型和数据库,并创建和/或附加到更改日志,这样你就不需要手动编辑XML。 您从文档中发现了什么? The current documentation for the liquibase-hibernate plugin is at https://github.com/liquibase/liquibase-h ...
  • 信息太少,无法真正给出答案。 但有些要点检查: 您正在使用交易。 你准备好了吗? 也许在某些时候你的代码看不到变化,因为尚未提交(或者因为读取代码在另一个使用先前状态的事务中)。 缓存也可能是个问题。 要检查,您可以在每次更改DB(Session.flush())后显式刷新缓存。 这可能会降低性能,但可能会帮助您缩小问题范围。 Too little information to really give an answer. But some points to check: You are using tr ...
  • HQL可以工作,cfquery中的基本SQL仍然可以正常工作。 Hibernate的优势在于不执行SUM()或AVG()等聚合函数,而是执行对象关系映射(ORM)。 HQL would work, basic SQL in cfquery would still work as well. The strength of Hibernate is not doing aggregated functions like SUM() or AVG(), but the Mapping of Object Rel ...
  • HQL与数据库无关,因此最好在Hibernate中使用HQL。 HQL is independent of database.So it is better to use HQL with hibernate.
  • 是的,您可以使用Hibernate 执行普通的SQL查询 。 不,你不需要单独的hbm.xml映射文件(除非你想将sql查询与其他文件分开,在这种情况下你可以这样做)。 您可以使用与命名HQL查询相同的方式映射命名的SQL查询。 您是否能够“利用缓存”取决于您通过“缓存”所了解的内容以及如何映射SQL查询; 不知道更多细节就无法回答。 所有这一切,你可能不需要求助于SQL查询; HQL功能非常强大,并且很有可能(假设存在适当的映射)将您的查询编写为HQL。 你能发布相关的映射/模式和你的SQL查询吗? Ye ...