模式 | Dao | Service | Control | servcie异常 | control抛异常 | 期望 | 结果 |
单表模式 | 只读 | / | / | / | / | 无法写入 | 无法写入 |
只读 | 写事务 | / | / | / | 写入 | 写入 | |
只读 | 写事务 | / | 有 | / | 回滚 | 回滚 | |
只读 | 写事务 | / | / | 有 | 回滚 | 回滚失败,数据写入成功 | |
只读 | / | 写事务 | / | / | 写入 | 写入 | |
只读 | / | 写事务 | 有 | / | 回滚 | 回滚 | |
只读 | / | 写事务 | / | 有 | 回滚 | 回滚 | |
只读 | 写事务 | 读事务 | / | / | 写入 | 以Control读事务为准,无法写入 | |
只读 | 读事务 | 写事务 | / | / | 写入 | 以Control写事务为准,写入成功 | |
模式 | Dao | Service | Control | servcie异常 | control抛异常 | 期望 | 结果 |
双表, 双service, 单control方法 |
只读 | / | / | / | / | 无法写入 | 无法写入 |
只读 | A,B 写事务 | / | / | / | 都写入 | 都写入 | |
只读 | A,B 写事务 | / | A 异常,B,正常 | / | 都回滚 | A回滚, B写入 | |
只读 | A,B 写事务 | / | A,B 均异常 | / | 都回滚 | 都回滚 | |
只读 | / | 写事务 | / | / | 写入 | 写入 | |
只读 | / | 写事务 | A 异常,B,正常 | / | 都回滚 | 都回滚 | |
只读 | / | 写事务 | A,B 均异常 | / | 都回滚 | 都回滚 | |
模式 | Dao | Service | Control | servcie异常 | control抛异常 | 期望 | 结果 |
双表, 双service, A,B,C 三control方法 C 执行A,B方法 |
只读 | / | / | / | / | 无法写入 | 无法写入 |
只读 | / | A,B,C 均写事务 | / | / | 都写入 | 都写入 | |
只读 | A,B,C 均写事务 | A 异常,B,正常 | / | 都回滚 | 都回滚 | ||
只读 | A,B,C 均写事务 | A,B 均异常 | / | 都回滚 | 都回滚 | ||
只读 | / | A,B写事务,C无事务 | / | / | 都写入 | 无法写入 | |
只读 | / | C事务,A,B无事务 | / | / | 都写入 | 都写入 | |
只读 | / | C事务,A,B无事务 | A 异常,B,正常 | / | 都回滚 | 都回滚 | |
只读 | / | C事务,A,B无事务 | A,B 均异常 | / | 都回滚 | 都回滚 | |
只读 | / | C事务,A,B无事务 | / | A 异常,B,正常 | 都回滚 | 都回滚 | |
只读 | / | C事务,A,B无事务 | / | A,B 均异常 | 都回滚 | 都回滚 | |
结论 | 1,事务注解的解析路径为:先找方法级,在找类定义级,在找父类定义 2,多事务嵌套,以最外层事务为准 3,事务的正确用法为,在类似control,facade等对外的最外层套上事务,service等中间过程不使用事务,dao层设置全部只读 4,最外层只要有涉及写操作,都必须套上写事务 |