Интеграция SpringBoot Couchbase

Я хочу создать фильтруемый список моей сущности UserTask с помощью интерфейса QueryDslPredicateExecutor, чтобы параметры, указанные в строке запроса, автоматически обрабатывались в Predicate.

У меня есть следующие классы / интерфейсы

public interface UserTaskQuerydslRepository extends CrudRepository<UserTask, String>, 
    QueryDslPredicateExecutor<UserTask>, QuerydslBinderCustomizer<QUserTask> {

    @Override
    default void customize(QuerydslBindings bindings, QUserTask userTask) {
        ...
    }
}

UserTask - это мой класс, который представляет модель (couchbase)

@QueryEntity
@Document(expiry = 0)
public class UserTask {

    @Id
    private String id;

    ...
}

Если я аннотирую этот класс с помощью @QueryEntity, тогда Maven сгенерирует для меня класс QUserTask

@Generated("com.mysema.query.codegen.EntitySerializer")
public class QUserTask extends EntityPathBase<UserTask> {

    private static final long serialVersionUID = 493434469L;

    public static final QUserTask userTask = new QUserTask("userTask");

    public final StringPath id = createString("id");

    ...

    public QUserTask(String variable) {
        super(UserTask.class, forVariable(variable));
    }

    public QUserTask(Path<? extends UserTask> path) {
        super(path.getType(), path.getMetadata());
    }

    public QUserTask(PathMetadata<?> metadata) {
        super(UserTask.class, metadata);
    }

}

Чтобы сгенерировать QUserTask, я добавил следующие строки в pom.xml

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <version>1.1.3</version>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <outputDirectory>target/generated-sources/apt</outputDirectory>
                <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                <processor>com.mysema.query.apt.QuerydslAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>3.4.3</version>
        </dependency>
    </dependencies>
</plugin>

В проекте есть как объекты JPA, так и объекты couchbase, поэтому у меня есть JPAAnnotationProcessor.

Если я запускаю приложение, как это, я получаю следующую ошибку:

org.springframework.data.mapping.PropertyReferenceException: для типа UserTask не найдено ни одного свойства findAll!

Я попытался аннотировать свой UserTaskQuerydslRepository с помощью @NoRepositoryBean, он решил мою проблему с findAll, но когда я пытаюсь @Inject из этого репозитория в ресурс (или контроллер, JHipster называет его ресурсом), я получаю следующую ошибку

Не найдено подходящего bean-компонента типа [.UserTaskQuerydslRepository] для зависимости: ожидается как минимум 1 bean-компонент, который квалифицируется как кандидат autowire для этой зависимости. Аннотации зависимостей: {@ javax.inject.Inject ()}

Может ли кто-нибудь помочь мне, что я сделал не так?


person aBnormaLz    schedule 01.07.2016    source источник
comment
Spring Data Couchbase не имеет поддержки QueryDsl, поэтому репозиторий не может быть реализован как bean-компонент, и поэтому Spring не может внедрить bean-компонент репозитория.   -  person mp911de    schedule 04.07.2016
comment
Теоретически у него есть docs.spring .io / spring-data / couchbase / docs / current / reference /.   -  person aBnormaLz    schedule 04.07.2016
comment
Как выглядит ваша конфигурация Spring? Может быть, у вас несколько контекстов Spring? Также вы можете проверить создание bean-компонента репозитория, просмотрев журналы.   -  person Jeremy    schedule 05.07.2016


Ответы (2)


Как сказал @ mp911de в своем комментарии, Spring Data Couchbase не поддерживает QueryDsl, что объясняет, почему компонент не может быть создан.

Я понимаю, откуда у вас замешательство при чтении документа. Глава 5 является общим для всех реализаций хранилища данных Spring. Во всех документах магазина есть одна глава с одинаковым содержанием, в которой в общих чертах рассказывается об основах репозитория. Таким образом, он может упоминать вещи, которых нет в конкретной реализации.

Первое предложение связанного вами раздела даже намекает на это:

Несколько модулей Spring Data предлагают интеграцию с Querydsl через QueryDslPredicateExecutor.

Несколько, но, к сожалению, не модуль Spring Data Couchbase.

person Simon Baslé    schedule 08.07.2016
comment
Я сделал библиотеку для построения динамических запросов N1QL. Пожалуйста, посмотрите, и если вы сочтете это полезным, не стесняйтесь использовать его в spring-data-couchbase. github.com/TeamWanari/couchbase-query-executor - person aBnormaLz; 05.10.2016
comment
Так ли это до сих пор? или теперь поддержка репозиториев Couchbase была расширена? - person Carlos Luis; 12.06.2019

2016 г. 07. 11.: После некоторого исследования и согласно ответам @ mp911de и @ simon-baslé мы знаем, что Spring Data Couchbase еще не поддерживает QueryDsl.

Я нашел обходной путь для проблемы, которую хотел решить (динамический запрос, также известный как фильтры в списке и сделать его доступным для страницы)

https://github.com/TeamWanari/couchbase-query-executor

person aBnormaLz    schedule 11.07.2016