在VB中,明明显示修改成功了,可以回去查数据信息没有改变这是为什么?_百度知道&&& 转问题:&
&&&&&&&&&&&&&&&&& 昨天遇到一个问题,就是我手动改了数据库中的数据,但是我前台页面刷新的时候,不能实现数据的实时更新,还是数据库中原来修改的数据,我想应该是跟事务有关的,因为手动修改数据库的话,没有经过事务的处理,而从前台实现数据库更新的话,是经过事务处理的,不知道我这样理解对不对?希望大神帮忙分析下是什么原因,如果我要实现手动修改数据库,页面实时刷新的话,要怎么修改呢?用的是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_
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ& && & |
+-----------------------+
1 row in set (0.00 sec)
可以知道默认事务隔离级别是可重复读(Repeatable read)t
因此只要修改mysql的事物级别为
mysql& set global transaction isolation
&& &Query OK, 0 rows affected (0.00 sec)
&& &mysql& set session transaction isolation
&& &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数据库的事物隔离级别
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1987次
排名:千里之外为什么我在mysql中成功修改了数据库,jsp页面显示的数据库内容不改变_百度知道用java从数据库中获取数据显示在窗口界面后,怎么修改表中的数据_百度知道