日期:2014-05-19  浏览次数:20638 次

Hibernate flush问题
在hibernate清除session数据到数据库的时候,有3种方法:
事务commit的时候;
数据get()出来之前;
还有调用session.flush()的时候;

但是我的程序只有事务commit的时候才可以,其他都无效,大家有没有出现这样的情况?有什么办法修改吗?是什么原因?

------解决方案--------------------
flush是强行清除session缓存,不会提交事务,数据要持久化必须要commit。
------解决方案--------------------
楼上 所言极是

flush 是强制 清理缓存 强制同步
并不会 提交事务 
必须 你commit

------解决方案--------------------
探讨
flush是强行清除session缓存,不会提交事务,数据要持久化必须要commit。

------解决方案--------------------
不清楚你的问题,看看代码才好,执行flush()方法的时候,Hibernate 清理缓存,发出hql,其实这时候数据库已经有数据,只是由于数据库本身的隔离级别的问题,一般数据库都默认看不到的,必须等commit()以后才可以看到,可以通过设置隔离级别,看到数据,但这是不安全的,有可能回滚的数据
------解决方案--------------------
这没有提交吧.
------解决方案--------------------
按这个应该可以呀 怪了 关注

------解决方案--------------------
不执行flush()方法的时候,Hibernate 清理缓存,发出hql,其实这时候数据库已经有数据,只是由于数据库本身的隔离级别的问题,一般数据库都默认看不到的,必须等commit()以后才可以看到,可以通过设置隔离级别,看到数据;

--> 你在后台设置隔离级别的为 未提交读,既可以看到你flush过的数据
--> 我用的是mysql数据库 设置隔离级别是 

mysql> select @@tx_isolation;(查看隔离级别)
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+

mysql> set transaction isolation level read uncommitted;(设置隔离级别为 未提交读)
Query OK, 0 rows affected

mysql> select @@tx_isolation;(查看隔离级别)

+------------------+
| @@tx_isolation |
+------------------+
| READ-UNCOMMITTED |
+------------------+

然后 你再select你的数据 即可看到!