mall icon indicating copy to clipboard operation
mall copied to clipboard

添加商品属性存在原子型问题

Open stulwd opened this issue 3 years ago • 1 comments

背景:添加产品属性对于属性分类表有两次数据库操作,第一次获取对应的分类记录,第二次把属性数量累加了1更新数据库。 问题:如果要是存在并发的情况,比如两个线程同时读取完了分类记录,获得的属性数量是一致的,那么两个线程同时加1,然后分别更新,就会导致实际只加了1而不是2。

stulwd avatar Jun 28 '21 18:06 stulwd

image 请问方便贴一下代码吗,没有找到“添加产品属性对于属性分类表有两次数据库操作” 这段代码。 代码中使用productAttributeValueDao插入getProductAttributeValueList时,id是自增的,应该不会有线程安全的问题。

        //添加商品参数,添加自定义商品规格
        relateAndInsertList(productAttributeValueDao, productParam.getProductAttributeValueList(), productId);
        
<mapper namespace="com.macro.mall.dao.PmsProductAttributeValueDao">
    <insert id="insertList">
        insert into pms_product_attribute_value (product_id,product_attribute_id,value) values
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.productId,jdbcType=BIGINT},
            #{item.productAttributeId,jdbcType=BIGINT},
            #{item.value,jdbcType=VARCHAR})
        </foreach>
    </insert>
</mapper>

VeniVeci avatar Dec 03 '23 09:12 VeniVeci