解决在插入数据组和组员的过程中因为新建数据组无法识别数据组id和组员对应的问题。

文章描述了一个在新建数据组并分配组员时遇到的问题,由于在插入数据时没有提供数据组的id(作为自增主键),导致数据完整性异常。解决方案是使用SELECTLAST_INSERT_ID()注解,在插入数据后获取生成的主键并将其绑定到对象的id属性上,确保数据正确插入关联表。
摘要由CSDN通过智能技术生成

项目场景:

  需要新建一个数据组,并在新建数据组的时候挑选已经在数据库中的组员,将组员分配到数据组里,将数据组的id和组员的id写入数据库的一个表中。


问题描述

  1.在新建项目的时候选择组员会调用以下方法,将数据组的id和组员id的集合传入

 private void setByGroudAndItem(Integer id, Integer[] checkitemIds) {
        if (checkitemIds==null){
            throw new RuntimeException("参数错误");
        }
        for (Integer checkitemId : checkitemIds) {
            HashMap<String, Integer> map = new HashMap<>();
            map.put("checkgroup_id",id);
            map.put("checkitem_id",checkitemId);
            checkgroupMapper.setByGroudAndItem(map);
        }
    }

  2.之后采用insert方法往数据库中的数据组表和数据组id和员工id表插入数据

  <insert id="add" parameterType="com.health.pojo.Checkgroup">
        insert into t_checkgroup(code,name,sex,helpCode,remark,attention)
        values
        (#{code},#{name},#{sex},#{helpCode},#{remark},#{attention})
    </insert>
 @Select("select checkitem_id from t_checkgroup_checkitem where checkgroup_id = #{id}")
    List<Integer> findCheckItemIdsByCheckGroupId(Integer id);

  3.会显示无法找到新建数据组的id

org.springframework.dao.DataIntegrityViolationException: 
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'checkgroup_id' cannot be null

原因分析:

        因为在新建数据组的时候并没有传id值进去,在数据库中id是自增的主键,所以导致录入t_checkgroup_checkitem数据表的时候无法得到新建数据组的id。


解决方案:

        在add新建方法中使用SELECT LAST_INSERT_ID()注解。

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


    <insert id="add" parameterType="com.health.pojo.Checkgroup">

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

        insert into t_checkgroup(code,name,sex,helpCode,remark,attention)
        values
        (#{code},#{name},#{sex},#{helpCode},#{remark},#{attention})
    </insert>

        该注解主要用于新增数据的时候主键不能自动生成的问题,可以将插入数据的主键返回到user 对象中。

        SELECT LAST_INSERT_ID()是得到insert数据的主键,该语句只支持自增主键。

        keyProperty="id"是将得到的主键设置为id属性。

        order="AFTER"是该语句将在执行完insert语句后执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值