在资源组挂靠新的资源时,由于roleId和resGroupId 是组合唯一键,所以在外部事务提交有记录的时候,当前事务提交会存在重复记录,考虑是并发操作导致。
MySQLIntegrityConstraintViolationException: Cannot add or update a child row
利用重复建更新的原理:
<insert id="bindResGroup">
INSERT INTO
`SECURITY_ROLE_RESOURCE_GROUP` (roleId, resGroupId)
VALUES
<foreach collection="resGroupIds" item="resGroupId" separator=",">
( #{roleId}, #{resGroupId})
</foreach>
ON DUPLICATE KEY UPDATE roleId = VALUES(roleId),resGroupId=VALUES(resGroupId)
</insert>
即使存在重复行记录也可以避免批量insert失败。