使用hibernate在mysql事务回滚失败以及处理办法

        我在学习hibernate的过程中发现,在写一个完整的事务异常处理过程中,我的try语句出错了,但居然没有执行catch语句中的回滚。特意到网上查了一波。

       首先说明我使用的是hibernate自动建表。网上说是数据库引擎的问题,但是,我在mysql的配置文件中已经做了

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

 

show engines;查询数据库的引擎

使用hibernate在mysql事务回滚失败以及处理办法_第1张图片

后来我又查了下表创建时的引擎

show create table t_user;

使用hibernate在mysql事务回滚失败以及处理办法_第2张图片

      发现引擎是MyISAM,那这就找到问题所在了。MyISAM是不支持事务的。而且网上说,hibernate自建表的引擎是使用的MyISAM。所以必须修改hibernate的配置文件

org.hibernate.dialect.MySQLInnoDBDialect

 

我这是hibernate的问题。如果你的数据库本身就是MyISAM引擎,建议你:

1.打开根目录下得my.ini文件,在[mysqld]下加入:

default-storage-engine=INNODB

如果有skip-innodb,那就把这行注掉即可。

2.重启mysql服务

3.再次进入mysql,输入:show engines;就可以看到默认的数据库模式已经是INNODB了;

4.原来存在的表则需要删除以后再重新建一个就是INNODB的了,如果不想删除,那就进入mysql,更新一下表引擎就可以了

执行:alter table 表名 ENGINE=InnoDB;

然后在执行:show table status from 数据库名 where name='表名';就可以查看状态了


 

你可能感兴趣的:(知错能改,hibernate,MySQL)