[color=red]blog遷移至[/color]:[url=
[size=medium] 專案框架就是標準的ssh,測試發現不能實現資料回滾,花了大半天的時間去檢查配置和程式均沒有問題,主要是從以下幾方面去查詢問題:spring 事務配置、巢狀事務、異常是否已經**獲、dao是否強制commit。
實在找不到原因,就在相同框架的前乙個專案中測試,確能正常控制資料回滾,太奇怪了,此時突然想到當前專案的資料庫是mysql,[color=red]mysql的表是有事務安全( 比如:innodb)和非事務安全(比如:isam、myisam)之分的[/color],隨即登入到mysql資料庫檢視:
[/size]
show create table nap_tb_user;
create table `nap_tb_user` (
`id` bigint(20) not null auto_increment,
`email` varchar(50) default null,
`mobile` varchar(20) default null,
`msn` varchar(50) default null,
`index_setting` varchar(50) default null,
`password` varchar(50) default null,
`phone` varchar(20) default null,
`real_name` varchar(50) default null,
`user_name` varchar(50) not null,
primary key (`id`),
unique key `user_name` (`user_name`)
) engine=myisam default charset=utf8
[size=medium]可知當前的表型別是[color=red]myisam[/color],是非事務安全的,所以無法實現資料回滾。
只要修改表的型別即可:[/size]
alter table tablename type=innodb;
[size=medium]如果是用hibernate自動建表,而mysql資料庫預設的建表型別不是innodb,需要修改配置檔案[/size]:
org.hibernate.dialect.mysqlinnodbdialect
-----------------------------------分 ------------------------------------隔 ------------------------------------線 --------------------------------------
spring事務不起作用的原因
1.transactional加在非public方法上,這個其實idea就能規避了,有語法檢查 2.非 transactional註解方法呼叫同類中使用 transactional註解的方法,不生效,原因是事務管理用到了動態 原理自己去查 偽 public void test transaction...
springboot 事務不起作用
當 transactional不起作用如何排查問題。可以按照以下幾個步驟逐一確認 1 首先要看資料庫本身對應的庫 表所設定的引擎是什麼。myisam不支援事務,如果需要,則必須改為innnodb。2 transactional所註解的方法是否為public 3 transactional所註解的方法...
Transactional事務不起作用原因補充
今天,使用 transactional,但是事務卻不起作用,配置確定配置成功,在網上查詢資料,在每個每個原因都試了之後仍然無效,最終發現,原來他們都漏了乙個原因,而我正好是這個原因。因為spring容器和spring mvc是父子容器,spring容器會先載入,如果此時掃瞄了controller,但...