手动修改数据库的值,hibernate查询还没有显示修改数据原因补充
来源:互联网 发布:国外类似淘宝网站 编辑:程序博客网 时间:2024/05/17 05:09
转问题:
昨天遇到一个问题,就是我手动改了数据库中的数据,但是我前台页面刷新的时候,不能实现数据的实时更新,还是数据库中原来修改的数据,我想应该是跟事务有关的,因为手动修改数据库的话,没有经过事务的处理,而从前台实现数据库更新的话,是经过事务处理的,不知道我这样理解对不对?希望大神帮忙分析下是什么原因,如果我要实现手动修改数据库,页面实时刷新的话,要怎么修改呢?用的是SSH+JPA+GlassFish服务器,先谢谢大家啦!
hibernate是采取二级缓存的策略,第一是session级别的缓存,二是sessionfactory级别的缓存,并且默认二级缓存是打开的。读取数据的时候,Hibernate将第一次读取的内容放到了缓存中,若此时有别的应用修改了数据库中的数据,程序再次读取的时候,内容是从缓存中直接获取,先从一级缓存中读,若没有则从二级缓存中读取,则读取的数据为过时的数据。
所以你手动的去修改数据库里面的数据……
j解决方法1:
一级缓存禁用方法:每询打开一个新的session.
二级缓存禁用方法:在hibernate.cfg.xml的<session-factory> </session-factory>之间加上
<property name="hibernate.cache.use_second_level_cache">false</property>
如果不行解决方法2:
问题补充:有可能不是Hibernate缓存的问题!!也有可能是数据库事物隔离级别的原因。
而通过查询 mysql> SELECT @@global.tx_isolation;
结果:
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ |
+-----------------------+
1 row in set (0.00 sec)
可以知道默认事务隔离级别是可重复读(Repeatable read)t
因此只要修改mysql的事物级别为
mysql> set global transaction isolation level read committed;
Query OK, 0 rows affected (0.00 sec)
这样就不会会造成幻象读(phantom read),所谓幻象读,就是同一个事务内,多次select,可以读取到其他session insert并已经commit的数据,
换句话说就是让事物镜像与其它事物发生同步关系;
在Hibernate中叶可以通过通过增加hibernate.cfg.xml配置文件中
<session-factory>节点下得
<property name="connection.isolation">2</property><property name="connection.isolation">2</property>
</session-factory>
来修改Mysl数据库的事物隔离级别
- 手动修改数据库的值,hibernate查询还没有显示修改数据原因补充
- mybatis显示修改数据库成功, 但没有修改数据库的原因 (mybatis可以查询但无法修改数据库)
- 手动修改Android数据库数据
- 手动修改Android数据库数据
- PHP实现对文本数据库的数据显示、加入、修改、删除、查询
- Hibernate的基本操作数据库,增加,修改,删除,查询
- 手动修改SQLITE数据库的版本
- 手动修改SQLITE数据库的版本
- hibernate中只让数据修改的字段更新数据库
- hibernate中只让数据修改的字段更新数据库
- hibernate的clear作用-set之后修改了数据库数据
- oracle数据库增删改后查询修改之前的数据
- 封装Hibernate对数据库的操作,包括: 添加,删除,修改,加载,查询,分页查询,命名查询
- PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法
- php实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法
- php实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法。
- 用dataGridView实现对数据库数据的修改并显示
- 用DataGridView修改数据库数据完整代码(手动)
- 基于Tableview的滚动,如何处理数据不变的问题-----待整理
- xcode 4.4 4.5命令行无法找到xcodebuild错误
- erlang网络编程的几个性能调优和注意点
- 深入分析Volatile的实现原理
- 进程间通信:用信号量实现对共享内存读写顺序的控制
- 手动修改数据库的值,hibernate查询还没有显示修改数据原因补充
- freemarker学习
- asp.net 实现无刷新上传(IFrame无刷新上传文件)
- Oracle发布Java 7安全修复
- OpenGL中的矩阵变换
- IOS pathForResource 返回为空
- Android系统架构图
- <IOS>当程序崩溃的时候怎么办 part-1
- 读 Beginning Android Games 2nd Edition (十八) 贪食蛇类