2012-07-16 5 views
0

У меня очень странная проблема. В моем репозитории мне нужно расширить интерфейс JpaSpecificationExecutor<T>, чтобы иметь возможность использовать findAll(Specification<T>, Pageable) для пользовательского поискового запроса.SpringData расширение JpaSpecificationExecutor error

Но, когда я использую JpaSpecificationExecutor,

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

} 

приложений won't сборки, метание No property count found for type class Description исключение.

У меня Description класс не имеет атрибута count. Когда я удаляю JpaSpecificationExecutor из репозитория, все снова работает хорошо.

ответ

0

Я столкнулся с тем же исключением. В моем случае причина заключалась в том, что ParentRepositoryImpl НЕ ИСПОЛЬЗУЛ правильно SimpleJpaRepository , который является реализацией JpaSpecificationExecutor. Итак, когда Spring попытается разрешить имена запросов, он исключает имена методов, принадлежащие тому, что Spring вызывает репозиторийBaseClass вашей реализации. Он с в классе org.springframework.data.repository.core.support.DefaultRepositoryInformation

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

Убедитесь, что repositoryBaseClass является то, что вы ожидаете. Он должен определять метод «count».

Если вы не продлеваете правильный суперкласс, метод («счетчик» в вашем случае) не исключает разрешение формы, а Spring пытается построить запрос, создав его в соответствии с его структурой имен ... и в этом фрагмент имени объекта проверяется на предмет вашего объекта.