自定义存储库实现中定义的方法未被识别(属性引用异常)

问题描述 投票:0回答:0

这个问题与自定义存储库实施

有关

我创建了一个自定义存储库

public interface CustomTransactionRepo<TEntity> {
    List<TEntity> basicSearch(String searchQuery, String searchColumn, Class<TEntity> collectionType);
}

其实施:

@Repository
public class CustomTransactionRepoImpl<TEntity> implements CustomTransactionRepo<TEntity> {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public List<TEntity> basicSearch(String searchQuery, String searchColumn, Class<TEntity> en) {
        var query = new Query();
        var criteria = new ArrayList<Criteria>();
        if (StringUtils.isNotEmpty(searchQuery)) {
            criteria.add(Criteria.where(searchColumn)
                                 .regex(searchQuery, "i"));
        }
        query.addCriteria(new Criteria().andOperator(criteria.toArray(new Criteria[0])));

        var simRecords = mongoTemplate.find(query, en);
        return simRecords;
    }
}

我有一个 BaseJPA 存储库,它扩展了我的 CustomRepo (CustomTransactionRepo) 和 MongoRepository

@NoRepositoryBean
public interface BaseJpaRepo<TEntity> extends CustomTransactionRepo<TEntity>, MongoRepository<TEntity, String> {
}

最后是 MyRepository (SimRecordRepository),只需要扩展 BaseJpaRepo

@Repository
public interface SimRecordRepository extends BaseJpaRepo<SimRecord> {
    
}

我从我的服务层调用这个存储库:

@Service
public class TransactionServiceImpl implements TransactionService {

    @Autowired
    private SimRecordRepository repo;

    @Override
    public List<SimRecord> basicSearch(String searchQuery, String searchColumn) {
        return repo.basicSearch(searchQuery, searchColumn, SimRecord.class);
    }
}

我的实体 SimRecord:

@Document(collection = "sim_record")
public class SimRecord {
    private String id;
    private String system;
    private String entity;
    @Field("business_ref")
    private String businessRef;
    private String recordSetId;
    private Object payload;
    private String payloadType;
    private Object canonical;
    private String canonicalType;
    private String processingStatus;
    private String recordStatus;
    private String resultType;
    private String classValue;
// Getters and Setters

现在运行构建时我遇到了异常:

org.springframework.data.mapping.PropertyReferenceException: No property 'basicSearch' found for type 'SimRecord'

我不确定还需要做什么。

注意 当我删除 BaseJpaRepo 并让 SimRecordRepository 直接扩展 CustomTransactionRepo 和 MongoRepository 时,我的应用程序运行良好。像这样:

@Repository
public interface SimRecordRepository extends MongoRepository<SimRecord, String>, CustomTransactionRepo<SimRecord> {

}

我期望的是我应该能够调用该方法

basicSarch()
但反而得到了propertyReference Exception

java spring-boot spring-data-jpa spring-data-mongodb
© www.soinside.com 2019 - 2024. All rights reserved.