当前使用版本(必填,否则不予处理)

extension 的当前版本(3.5.0)

该问题是如何引起的?(确定最新版也有问题再提!!!)

ServiceImpl 中 removeByIds 判断了逻辑删除

        TableInfo tableInfo = TableInfoHelper.getTableInfo(getEntityClass());
        if (tableInfo.isWithLogicDelete() && tableInfo.isWithUpdateFill()) {
            return removeBatchByIds(list, true);
        }
        return SqlHelper.retBool(getBaseMapper().deleteBatchIds(list));

但是 IService 中没判断 直接删除了

      return SqlHelper.retBool(getBaseMapper().deleteBatchIds(list));

Comment From: liyaocool

批量逻辑删除的方法,如果会直接物理删除。可在实体类的逻辑删除字段上加上显式的@TableLogic , 例如: @TableLogic private String delFlag;

Comment From: miemieYaho

逻辑删除就不会物理删除, ServiceImpl那是扩展了填充字段的删除

Comment From: 157677678

逻辑删除就不会物理删除, ServiceImpl那是扩展了填充字段的删除

这个跟我说的不是一回事 我现在就是发现如果我要是继承 ISevice removeByIds 就是物理删除 必须继承 ServiceImpl 才可以 逻辑删除 这个应该是个bug啊

Comment From: miemieYaho

如果你是逻辑删除那BaseMapper.deleteBatchIds(list)就不会是物理删除

Comment From: 157677678

如果你是逻辑删除那BaseMapper.deleteBatchIds(list)就不会是物理删除

我是直接继承 ISevice

Comment From: miemieYaho

和你继承谁都没任何关系

Comment From: 157677678

和你继承谁都没任何关系

之前试验时候 继承IService 是全部删除 改为 ServiceImpl 就是变成逻辑删除 看代码 IService 里

    default boolean removeByIds(Collection<?> list) {
        if (CollectionUtils.isEmpty(list)) {
            return false;
        }
        return SqlHelper.retBool(getBaseMapper().deleteBatchIds(list));
    }

而 ServiceImpl

 @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean removeByIds(Collection<?> list) {
        if (CollectionUtils.isEmpty(list)) {
            return false;
        }
        TableInfo tableInfo = TableInfoHelper.getTableInfo(getEntityClass());
        if (tableInfo.isWithLogicDelete() && tableInfo.isWithUpdateFill()) {
            return removeBatchByIds(list, true);
        }
        return SqlHelper.retBool(getBaseMapper().deleteBatchIds(list));
    }



    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean removeBatchByIds(Collection<?> list, int batchSize) {
        TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
        return removeBatchByIds(list, batchSize, tableInfo.isWithLogicDelete() && tableInfo.isWithUpdateFill());
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean removeBatchByIds(Collection<?> list, int batchSize, boolean useFill) {
        String sqlStatement = getSqlStatement(SqlMethod.DELETE_BY_ID);
        TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
        return executeBatch(list, batchSize, (sqlSession, e) -> {
            if (useFill && tableInfo.isWithLogicDelete()) {
                if (entityClass.isAssignableFrom(e.getClass())) {
                    sqlSession.update(sqlStatement, e);
                } else {
                    T instance = tableInfo.newInstance();
                    tableInfo.setPropertyValue(instance, tableInfo.getKeyProperty(), e);
                    sqlSession.update(sqlStatement, instance);
                }
            } else {
                sqlSession.update(sqlStatement, e);
            }
        });
    }

这两个方法中 removeByIds 的实现不一样 ServiceImpl里就没有delete 用的是Update

Comment From: miemieYaho

都告诉你了就只有字段填充的区别,非要列代码出来,我不比你清楚?

Comment From: 157677678

都告诉你了就只有字段填充的区别,非要列代码出来,我不比你清楚? 用 Mapper 试了一下 确实一样 之前的代码改了很多 没法恢复了 回头我看看怎么再重新试一下 确定一下吧 谢谢