【问题标题】:SpringBoot Couchbase IntegrationSpringBoot Couchbase 集成
【发布时间】:2016-11-04 08:02:49
【问题描述】:

我想使用 QueryDslPredicateExecutor 接口为我的 UserTask 实体创建一个可过滤列表,因此查询字符串中给出的参数将被自动处理为谓词。

我有以下类/接口

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!

我尝试使用 @NoRepositoryBean 注释我的 UserTaskQuerydslRepository,它解决了我的 findAll 问题,但是当我尝试将此存储库 @Inject 到资源(或控制器,JHipster 将其称为资源)时,我收到以下错误

没有 [.UserTaskQuerydslRepository] ​​类型的限定 bean 找到依赖项:预计至少有 1 个符合条件的 bean 此依赖项的自动装配候选者。依赖注解: {@javax.inject.Inject()}

谁能帮我做错了什么?

【问题讨论】:

  • Spring Data Couchbase 没有 QueryDsl 支持,因此存储库无法实现为 bean,因此 Spring 无法注入存储库 bean。
  • 你的 Spring 配置是什么样的?也许你有多个 Spring 上下文?您还可以通过查看日志来验证存储库 bean 是否正在创建。

标签: spring spring-boot couchbase spring-data-couchbase


【解决方案1】:

正如@mp911de 在评论中所说,Spring Data Couchbase 不支持QueryDsl,这就解释了为什么无法创建 bean。

我可以在阅读文档时看到您的困惑来自哪里。第 5 章是所有 Spring Data store 实现共有的内容。所有商店文档都有一章具有相同的内容,通常讨论存储库基础知识。所以它可以提及不在特定实现中的东西。

您链接的部分的第一句话甚至暗示了它:

几个 Spring Data 模块通过 QueryDslPredicateExecutor 提供与 Querydsl 的集成。

不幸的是,有几个,但不是 Spring Data Couchbase 模块。

【讨论】:

  • 我创建了一个库来构建动态 N1QL 查询。请看一下,如果你觉得它有用,请随时在 spring-data-couchbase 中使用它。 github.com/TeamWanari/couchbase-query-executor
  • 还是这样吗?还是现在已将支持扩展到 Couchbase 存储库?
【解决方案2】:

2016 年。 07. 11. : 经过一些研究,根据@mp911de 和@simon-baslé 的回答,我们知道Spring Data Couchbase 还不支持QueryDsl。

我找到了我想要解决的问题的解决方法(动态查询,又名。过滤列表并使其可分页)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    相关资源
    最近更新 更多