SpringData扩展了JpaSpecificationExecutor错误

时间:2012-07-16 12:23:18

标签: java spring-data spring-data-jpa

我有一个非常奇怪的问题。在我的存储库中,我需要扩展JpaSpecificationExecutor<T>接口,以便能够使用findAll(Specification<T>, Pageable)进行自定义查询分页。

但是,当我使用JpaSpecificationExecutor时,

public interface DescriptionRepository extends ParentRepositoryCustom<Description, Long>,
        JpaSpecificationExecutor<Description> {

} 

应用程序不会构建,抛出No property count found for type class Description异常。

我的Description类没有count属性。当我从存储库中删除JpaSpecificationExecutor时,一切都运行良好。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的例外。在我的情况下,原因是 ParentRepositoryImpl没有正确地执行SimpleJpaRepository 这是JpaSpecificationExecutor的一个实现。 因此,当Spring尝试解析查询名称时,它会排除属于Spring调用实现的repositoryBaseClass的方法名称。它在类org.springframework.data.repository.core.support.DefaultRepositoryInformation

public boolean isBaseClassMethod(Method method) {
    return isTargetClassMethod(method, repositoryBaseClass);
}

检查repositoryBaseClass是否符合预期。它应该定义“计数”方法。

如果你没有扩展正确的超类,那么方法(在你的情况下为“count”)不会被排除在表单解析之外,Spring会尝试通过根据其名称结构创建查询来构建查询...在这种情况下名称片段将针对您的实体属性进行测试。