mybatis通过SCOPE_IDENTITY()获取insert语句的自增主键时(sqlserver)

时间:2022-01-18 22:23:57

获取主键时返回的总是null

经过网上搜索资料,感觉

<selectKey keyProperty="companyUserId" order="AFTER" resultType="java.lang.Integer">
SELECT SCOPE_IDENTITY()
</selectKey>
是一个bug


而且是存在与mabatis框架下的bug


原因猜想

1、insert语句和select  scope_identity()不是同时执行,而是分开执行的

先执行insert语句,之后再发起一个sql执行select  scope_identity(),所以获取不了自增主键

2、insert语句和select scope_identity()处于同一个事务中,当跑insert之后跑select scope_identity()语句,由于处于事务中,事务并没提交,所以获取不了主键id


解决方法:

使用jdbc的useGeneratedKeys="true" keyProperty="companyUserId"属性