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

3.5.3.1

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

我使用了泛型接口执行 LambdaQueryWrapper,使用了Consumer拼接了一个 And 条件,报出了一个实体找不到字段的错误,并解析为父类实体

重现步骤(如果有就写完整)

MyBatis-Plus 泛型接口执行 LambdaQueryWrapper 出现 can not find lambda cache for this entity

父类接口

public interface IWorkspaceDataSetFieldConfigService<T extends BaseWorkspaceDataSetFieldConfig, P extends BaseParentFieldConfig, R extends BaseFieldConfig> extends IService<T>

子类接口

public interface IWorkspaceDataSetFilterFieldConfigService extends IWorkspaceDataSetFieldConfigService<WorkspaceDataSetFilterFieldConfig, ParentFilterFieldConfig, FilterFieldConfig>

子类接口实现

public class WorkspaceDataSetFilterFieldConfigServiceImpl extends WorkspaceDataSetFieldConfigServiceImpl<WorkspaceDataSetFilterFieldConfigMapper, WorkspaceDataSetFilterFieldConfig>
        implements IWorkspaceDataSetFilterFieldConfigService

这是调用代码,isDefaultDisplayFlagWorkspaceDataSetFilterFieldConfig 子类的字段,父类为 BaseWorkspaceDataSetFieldConfig

workspaceDataSetFilterFieldConfigService.listValidatedByWorkspaceDataSetId(workspaceDataSet.getId(), cs -> cs.eq(WorkspaceDataSetFilterFieldConfig::isDefaultDisplayFlag, true))

报错信息

can not find lambda cache for this entity

Comment From: miemieYaho

识别不到T的具体类型,wapper实例化使用有class入参的构造函数并传入实际的T的class

Comment From: shencangsheng

@miemieYaho 我更换了一种方式,但是还是报 can not find lambda cache for this entity 这个错误,以下是我代码

default List<P> listFiledConfig(String workspaceDataSetId, LambdaQueryWrapper<T> workspaceDataSetLambdaQueryWrapper, LambdaQueryWrapper<P> parentLambdaQueryWrapper, LambdaQueryWrapper<R> lambdaQueryWrapper) throws Exception {
        List<T> workspaceDataSetFieldConfigs = list(workspaceDataSetLambdaQueryWrapper.eq(T::getWorkspaceDataSetId, workspaceDataSetId));
        Map<String, List<T>> map = workspaceDataSetFieldConfigs.stream().collect(Collectors.groupingBy(p -> p.getParentFieldId()));
        List<P> parentFieldConfigs = getParentFieldConfigService().list(parentLambdaQueryWrapper);
        for (P parentFieldConfig : parentFieldConfigs) {
            parentFieldConfig.setFieldConfigs(getFieldConfigService().list(lambdaQueryWrapper.in(R::getId, map.get(parentFieldConfig.getId()).stream().map(p -> p.getId()).collect(Collectors.toList()))));
        }
        return parentFieldConfigs;
    }

List listFiledConfig = workspaceDataSetFilterFieldConfigService.listFiledConfig("10000", new LambdaQueryWrapper<WorkspaceDataSetFilterFieldConfig>()
                .eq(WorkspaceDataSetFilterFieldConfig::isDefaultDisplayFlag, true), new LambdaQueryWrapper<>(), new LambdaQueryWrapper<>());

现在不知道该如何进行了

Comment From: miemieYaho

new LambdaQueryWrapper(T.class)

Comment From: shencangsheng

@miemieYaho 感谢,可以了