阿里读写分离数据源SELECT LAST_INSERT_ID()获取不到id

异常现象

insert 通过 mybatis 以下语法给领域类 赋予的 id 值为0. 后续根据主键的update操作失效。且无异常抛出

<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
      SELECT LAST_INSERT_ID()
    selectKey>

产生原因

因为 执行插入语句 是在 写库 , 而SELECT LAST_INSERT_ID() 是在读库执行。

解决方案 ##

  • 添加 /FORCE_MASTER/ 注解 使该sql 走 master 节点,代码如下
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
      /*FORCE_MASTER*/
      SELECT LAST_INSERT_ID()
    </selectKey>
  • 添加事物

可以参考 :https://help.aliyun.com/document_detail/51073.html

你可能感兴趣的:(奇葩bug解决合集)