Spring Data Cassandra: нет свойства findAll для типа User

У меня есть очень простой проект Spring Data Cassandra, для которого контекст приложения не запускается. Весь проект состоит из четырех файлов: объект домена, интерфейс репозитория, конфигурация cassandra и точка входа приложения. Вот объект домена:

@Table
public class User {
    @PrimaryKeyColumn(name = "user_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    public UUID userId;
}

и интерфейс репозитория:

@Repository
public interface UserRepository extends PagingAndSortingRepository<User, UUID> {
}

Конфигурация довольно проста:

@Configuration
public class TestSpringDataCassandraConfiguration extends AbstractCassandraConfiguration {
    @Override 
    protected String getKeyspaceName() {
        return "company";
    }
    @Override 
    protected List<CreateKeyspaceSpecification> getKeyspaceCreations() {
        return Collections.singletonList(CreateKeyspaceSpecification
                .createKeyspace(getKeyspaceName())
                .ifNotExists()
                .withSimpleReplication(1));
    }
    @Override 
    public String[] getEntityBasePackages() {
        return new String[] { "com.company.project.cassandra.entity"};
    }
    @Override 
    public SchemaAction getSchemaAction() {
        return SchemaAction.CREATE_IF_NOT_EXISTS;
    }
}

И точка входа настолько проста, насколько это возможно.

@SpringBootApplication
public class TestApplication {
    public static void main(String[] sa) {
        SpringApplication.run(TestApplication.class, sa);
    }
}

Вот зависимости проекта:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>1.5.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-cassandra</artifactId>
        <version>1.5.4.RELEASE</version>
    </dependency>
</dependencies>

Несмотря на все это, приложение не запускается со следующей ошибкой:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type User!
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:742) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
        at com.company.project.Application.main(Application.java:9) [classes/:na]
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type User!
        at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:77) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:329) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:309) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:272) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:243) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.repository.query.parser.Part.<init>(Part.java:76) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:247) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:398) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:378) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:86) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.cassandra.repository.query.PartTreeCassandraQuery.<init>(PartTreeCassandraQuery.java:47) ~[spring-data-cassandra-1.5.4.RELEASE.jar:na]
        at org.springframework.data.cassandra.repository.support.CassandraRepositoryFactory$CassandraQueryLookupStrategy.resolveQuery(CassandraRepositoryFactory.java:163) ~[spring-data-cassandra-1.5.4.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:436) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:221) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:277) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:263) ~[spring-data-commons-1.13.4.RELEASE.jar:na]
        at org.springframework.data.cassandra.repository.support.CassandraRepositoryFactoryBean.afterPropertiesSet(CassandraRepositoryFactoryBean.java:76) ~[spring-data-cassandra-1.5.4.RELEASE.jar:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
        ... 15 common frames omitted

Действительно странно то, что приложение запускается нормально, если UserRepository расширяет CrudRepository. Кто-нибудь знает, что не так с этой настройкой?


person cscan    schedule 13.07.2017    source источник
comment
Spring Data для Apache Cassandra не поддерживает PagingAndSortingRepository. Используйте только CrudRepository.   -  person mp911de    schedule 13.07.2017
comment
Какая? Да, это так. docs.spring .io/spring-data/cassandra/docs/1.5.4.RELEASE/   -  person cscan    schedule 13.07.2017
comment
Вы имеете в виду часть общей документации, объясняющую, как работают репозитории в целом (This chapter explains the core concepts and interfaces of Spring Data repositories. The information in this chapter is pulled from the Spring Data Commons module. It uses the configuration and code samples for the Java Persistence API (JPA) module.).   -  person mp911de    schedule 13.07.2017
comment
Хорошо, это ничуть не сбивает с толку. Нигде в документации не сказано, что пейджинг нельзя использовать. Знаете ли вы, поддерживаются ли методы подсчета? У меня тоже проблемы с ними. Идите вперед и добавьте ответ; спасибо за помощь.   -  person cscan    schedule 14.07.2017
comment
Подсчет поддерживается через count(), но не через проекции подсчета (countByFirstnameandLastname(…)). Хотите опубликовать новый вопрос с проблемой подсчета?   -  person mp911de    schedule 14.07.2017
comment
Нет, мы решили отказаться от весенних данных из-за отсутствия поддержки пейджинга (которую предоставляет драйвер datastax)   -  person cscan    schedule 14.07.2017


Ответы (1)


Превращение комментария @ mp911de в правильный ответ:

Spring Data для Apache Cassandra не поддерживает PagingAndSortingRepository. Используйте только CrudRepository.

К сожалению, в справочной документации функции упоминаются как поддержка PagingAndSortingRepository, но это лишь общая часть того, как работает Spring Data.

Планируется работа над улучшением документации: https://jira.spring.io/browse/DATACMNS-1086

person Jens Schauder    schedule 15.07.2017
comment
Добавьте к этому примечание из официальной документации: Cassandra repositories do not extend PagingAndSortingRepository, because classic paging patterns using limit/offset are not applicable to Cassandra. docs.spring.io/spring-data/cassandra/docs/current/reference/ - person Pranav; 05.05.2020