关于mysql数据库引擎导致的heibenate的executeUpdate语句不受事务控制

来源:互联网 发布:matlab把向量变成矩阵 编辑:程序博客网 时间:2024/06/17 10:49

  在开发过程中,在配置注解式hibernate事务的时候,发现executeUpdate语句不受事务控制。

只要一执行,根本没有机会rollback,直接就进了mysql数据库,

找了许多文档都找不到解决办法,后来发现是由于mysql的数据库引擎和表引擎上:

发现所有的表引擎都是myisam的,根本不支持事务,只要全部修改为innodb的就ok了;


查看与修改mysql数据库与表引擎方法:

如何查看MySQL的当前存储引擎?
一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看:
 
看你的mysql现在已提供什么存储引擎:
mysql> show engines;
 
看你的mysql当前默认的存储引擎:
mysql> show variables like '%storage_engine%';


修改表引擎:

alter table table_name engine=innodb;  
alter table table_name engine=myisam; 


事务配置如下:

<!-- 配置数据源 --><bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><property name="url" value="${jdbc_url}" /><property name="username" value="${jdbc_username}" /><property name="password" value="${jdbc_password}" /><!-- 初始化连接大小 --><property name="initialSize" value="10" /><!-- 连接池最大使用连接数量 --><property name="maxActive" value="100" /><!-- 连接池最小空闲 --><property name="minIdle" value="10" /><!-- 获取连接最大等待时间 --><property name="maxWait" value="300000" /><!-- <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> --><property name="validationQuery" value="${validationQuery}" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><property name="testWhileIdle" value="true" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="25200000" /><!-- 打开removeAbandoned功能 --><property name="removeAbandoned" value="true" /><!-- 1800秒,也就是30分钟 --><property name="removeAbandonedTimeout" value="1800" /><!-- 关闭abanded连接时输出错误日志 --><property name="logAbandoned" value="true" /><!-- 监控数据库 --><!-- <property name="filters" value="mergeStat" /> --><property name="filters" value="stat" /><property name="defaultAutoCommit" value="false" /> </bean><!-- 配置hibernate session工厂 --><bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="hibernateProperties"><props><prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop><prop key="hibernate.dialect">${hibernate.dialect}</prop><prop key="hibernate.show_sql">${hibernate.show_sql}</prop><prop key="hibernate.format_sql">${hibernate.format_sql}</prop><prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop><prop key="hibernate.connection.autocommit">false</prop></props></property><!-- 自动扫描注解方式配置的hibernate类文件 --><property name="packagesToScan"><list><value>light.mvc.model</value></list></property></bean><!-- 配置事务管理器 --><bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 注解方式配置事物 --><tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
原创粉丝点击