SpringBoot Couchbase 集成
SpringBoot Couchbase Integration
我想使用 QueryDslPredicateExecutor 接口创建我的 UserTask 实体的可过滤列表,因此查询字符串中给定的参数将被自动处理为谓词。
我有以下classes/interfaces
public interface UserTaskQuerydslRepository extends CrudRepository<UserTask, String>,
QueryDslPredicateExecutor<UserTask>, QuerydslBinderCustomizer<QUserTask> {
@Override
default void customize(QuerydslBindings bindings, QUserTask userTask) {
...
}
}
UserTask 是我的 class 代表(沙发底座)模型
@QueryEntity
@Document(expiry = 0)
public class UserTask {
@Id
private String id;
...
}
如果我用 @QueryEntity 注释这个 class 然后 Maven 会为我生成 QUserTask class
@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: No
property findAll found for type UserTask!
我尝试用@NoRepositoryBean 注释我的 UserTaskQuerydslRepository,它解决了我的 findAll 问题,但是当我尝试将此存储库 @Inject 到资源(或控制器,JHipster 称之为资源)时,我收到以下错误
No qualifying bean of type [.UserTaskQuerydslRepository]
found for dependency: expected at least 1 bean which qualifies as
autowire candidate for this dependency. Dependency annotations:
{@javax.inject.Inject()}
任何人都可以帮助我我做错了什么吗?
正如@mp911de 在他的评论中所说,Spring Data Couchbase 不支持 QueryDsl
,这解释了为什么无法创建 bean。
我可以在阅读文档时看到您的困惑来自何处。第 5 章是所有 Spring 数据存储实现的通用内容。所有商店文档都有一个内容相同的章节,通常讨论存储库基础知识。所以它可以提到特定实现中没有的东西。
您链接的部分的第一句话甚至暗示了这一点:
Several Spring Data modules offer integration with Querydsl via QueryDslPredicateExecutor.
几个,但不幸的是 Spring Data Couchbase 模块没有。
2016 年。 07. 11. : 经过一些研究,根据@mp911de 和@simon-baslé 的回答,我们知道 Spring Data Couchbase 还不支持 QueryDsl。
我找到了我想要解决的问题的解决方法(动态查询,也就是列表上的过滤器并使其可分页)
我想使用 QueryDslPredicateExecutor 接口创建我的 UserTask 实体的可过滤列表,因此查询字符串中给定的参数将被自动处理为谓词。
我有以下classes/interfaces
public interface UserTaskQuerydslRepository extends CrudRepository<UserTask, String>,
QueryDslPredicateExecutor<UserTask>, QuerydslBinderCustomizer<QUserTask> {
@Override
default void customize(QuerydslBindings bindings, QUserTask userTask) {
...
}
}
UserTask 是我的 class 代表(沙发底座)模型
@QueryEntity
@Document(expiry = 0)
public class UserTask {
@Id
private String id;
...
}
如果我用 @QueryEntity 注释这个 class 然后 Maven 会为我生成 QUserTask class
@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: No property findAll found for type UserTask!
我尝试用@NoRepositoryBean 注释我的 UserTaskQuerydslRepository,它解决了我的 findAll 问题,但是当我尝试将此存储库 @Inject 到资源(或控制器,JHipster 称之为资源)时,我收到以下错误
No qualifying bean of type [.UserTaskQuerydslRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.inject.Inject()}
任何人都可以帮助我我做错了什么吗?
正如@mp911de 在他的评论中所说,Spring Data Couchbase 不支持 QueryDsl
,这解释了为什么无法创建 bean。
我可以在阅读文档时看到您的困惑来自何处。第 5 章是所有 Spring 数据存储实现的通用内容。所有商店文档都有一个内容相同的章节,通常讨论存储库基础知识。所以它可以提到特定实现中没有的东西。
您链接的部分的第一句话甚至暗示了这一点:
Several Spring Data modules offer integration with Querydsl via QueryDslPredicateExecutor.
几个,但不幸的是 Spring Data Couchbase 模块没有。
2016 年。 07. 11. : 经过一些研究,根据@mp911de 和@simon-baslé 的回答,我们知道 Spring Data Couchbase 还不支持 QueryDsl。
我找到了我想要解决的问题的解决方法(动态查询,也就是列表上的过滤器并使其可分页)