如题在学hibernate的时候,当只在业务中进行了flush,发现mysql 数据库中已经可以查到数据了(read uncommitted),看了隔离级别是repeatable-read,不知道是什么缘故?
设置的隔离级别
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.03 sec)
未提交查到的数据
mysql> select * from user1;
+----------------------------------+-------+----------+
------------------+
| id                               | name  | password |
pireTime          |
+----------------------------------+-------+----------+
------------------+
| 402880f127899c150127899d4b8e0001 | lishi | 123      |
10-03-23 14:02:17 |
+----------------------------------+-------+----------+
------------------+
1 row in set (0.00 sec)

解决方案 »

  1.   

    当只在业务中进行了flush你的FLUSH是什么动作?具体到MYSQL是什么命令?
      

  2.   

    就是hibernate中save后手动调用flush的,hibernate也发出了sql语句,但是还没执行commite
    数据库(隔离级别是可重复读)中就可以查到数据了
      

  3.   

    flush后hibernate执行的语句:
    Hibernate: insert into User1 (name, password, createTime, expireTime) values (?, ?, ?, ?)
      

  4.   

    myisam引擎不是事务性的。
    查看一下表结构是什么类型的。
      

  5.   

    | user1 | CREATE TABLE `user1` (
      `id` varchar(32) NOT NULL,
      `name` varchar(255) NOT NULL,
      `password` varchar(255) NOT NULL,
      `createTime` datetime default NULL,
      `expireTime` datetime default NULL,
      PRIMARY KEY  (`id`),
      UNIQUE KEY `name` (`name`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
    用的默认的引擎是myisam,查了下,是不支持事务的。http://www.ixdba.net/article/2f/2092$2.html对这篇文章上说的:
    对不支持事务的表做start/commit操作没有任何效果,在执行commit前已经提交,测试:
    执行一个msyql:
    use test;
    drop table if exists tn;
    create table tn (a varchar(10)) type=myisam;
    drop table if exists ty;
    create table ty (a varchar(10)) type=innodb;begin;
    insert into tn values('a');
    insert into ty values('a');
    select * from tn;
    select * from ty;(1)
    都能看到一条记录执行另一个mysql:(2)
    use test;
    select * from tn;
    select * from ty;(3)
    只有tn能看到一条记录
    然后在另一边
    commit;
    才都能看到记录。(1)这条语句为什么已经可以查到数据了?不是还没提交么?照默认隔离级别是repeatable-read的话,不是应该是查不到的么?
    (2)另一个mysql?要怎么样才能打开?我打开另一个dos窗口运行了,发现(3)也是有数据了。
      

  6.   

    flush还没提交,就只是清理缓存,生成sql语句,为什么提交,是4楼的那位兄弟说的,mysql的myisam引擎是不支持事务的。innodb引擎才支持事务。
      

  7.   

    那你的问题本身就很矛盾!!!MYISAM不支持事务,你来问这个问题干嘛?自己为什么不好好看看书呢?
      

  8.   

    MYISAM不支持事务这个我是看了4楼的大大后才知道的然后对MYISAM不支持事务进行了验证,就碰到了5楼的问题所以等哪位大大再给解释下。
    PS:5楼(1)的问题,是innodb引擎的,是支持事务的。