当前使用版本(必填,否则不予处理)
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 试了一下 确实一样 之前的代码改了很多 没法恢复了 回头我看看怎么再重新试一下 确定一下吧 谢谢