saveOrUpdateBatch批量更新,设置isdeleted为1不生效

Blade 已结 1 585
半路笙歌
半路笙歌 剑圣 2022-01-20 10:56

一、该问题的重现步骤是什么?

1. 设置list集合总的实体数据的isdeleted为1

2. 调用saveOrUpdateBatch方法,不生效

3.查看打印的sql,发现其中并未设置isdeleted字段


二、你期待的结果是什么?实际看到的又是什么?

saveOrUpdateBatch 可以更新isdeleted字段


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

bladex 2.5.1

macos


四、请提供详细的错误堆栈信息,这很重要。

代码:

(= Exception.)
R (AddAtlDTO addAtlDTO) {
   Long id = addAtlDTO.getId()AssessTemplate assessTemplate = selectAssessTemplateById(id)(assessTemplate == ){
      R.()}
   assessTemplate.setName(addAtlDTO.getName()).saveOrUpdate(assessTemplate)List<AssessTemplateDetails> assessTemplateDetailsList = addAtlDTO.getAssessTemplateDetailsList()(!StringUtil.(id)){
      (AssessTemplateDetails details : assessTemplateDetailsList) {
         details.setAtId(id)}
   }
   .saveOrUpdateBatch(assessTemplateDetailsList)R.()}

image.png

控制台打印的update语句(只拿了一条),并未发现isdeleted字段:

==============  Sql Start  ==============

Execute ID  :cn.zkml.mt.mapper.AssessTemplateDetailsMapper.updateById

Execute SQL :UPDATE ihp_assess_template_details SET at_id = ?, name = ?, template_order = ?, amplitude_pl = ?, amplitude_ab = ?, cycle = ?, time = ?, abdominal_muscles_threshold = ?, pelvic_floor_muscles_threshold = ?, abdominal_muscles_training_curve = ?, pelvic_floor_muscles_training_curve = ?, content = ?, tenant_id = ?, prompt_content = ?, create_user = ?, create_dept = ?, update_user = ?, update_time = ?, status = ? WHERE id = ? AND is_deleted = 0

Execute Time:0 ms

==============  Sql  End   ==============

数据库查询这条数据:

SELECT a.id,a.is_deleted FROM ihp_assess_template_details a where a.id = '1483636959871041537'

image.png


五、若有更多详细信息,请在下面提供。

1条回答
  •  admin
    admin (最佳回答者)
    2022-01-20 22:18

    is_deleted字段用了@Version注解标注,开启了mybatis-plus的逻辑删除功能,所以保存入库的时候,就算设置了is_deleted也是不管用的。

    你可以在Entity加上is_deleted字段,覆盖掉BaseEntity的@Verison注解,这样就可以自己设置值了,但于此相对应的会取消逻辑删除功能,也就是说执行remove的时候也不会自动设置is_deleted的值了,需要自行设置。

    0 讨论(1)
提交回复