1.现象
发生异常,未回顾,第一张表数据已入库;
2.背景
两条插入语句,
保存两张表数据,第一张表正常插入语句,第二条sql故意写错,看事务能否生效;
两条sql
insert into tg_guide_info(guide_id, shop_code, guide_name, service_id, creator, modifier)
values (#{guideId},#{shopCode},#{guideName},#{serviceId},#{operator},#{operator})
-- 注意有个ifnull是写错的。
insert into tg_guide_item_info (guide_id, item_id, item_name, brand_name, item_model, bar_code,creator, modifier)
values <foreach collection="list" separator="," item="item">
(#{guideId},#{item.itemId},#{item.itemName},ifnull(#{item.brandName},""),ifull(#{item.itemModel},""),ifnull(#{item.barCode},""),#{user},#{user})
</foreach>
执行单元测试后,报错,
查看数据库:
发现第一张表已经插入数据,
第二张表由于报错没有生成!
我屮艸芔茻,这不应该啊,同一个事务报错应该回顾啊。
3.解决
由于我的工程里面多个数据库连接,立马看下有没有指定事务管理器,
一看service上的数据管理器就是操作的数据库呢。
这可咋整!
我又看了下方法上又加了事务,好像没啥问题
1.关键就这这里,请记住一句话
方法的@Transactional会覆盖类上面声明的事务
4.总结
1.多数据源需要检查事务管理器
2.方法的@Transactional会覆盖类上面声明的事务