我想使用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:没有 找到属性findAll的用户类型UserTask!
我尝试使用@NoRepositoryBean注释我的UserTaskQuerydslRepository,它解决了我的findAll问题,但当我尝试@Inject这个存储库到资源(或控制器,JHipster称之为资源)时,我得到以下错误
没有[.UserTaskQuerydslRepository]类型的限定bean 找到依赖:预计至少有1个bean符合条件 autowire候选人这种依赖。依赖注释: {@ javax.inject.Inject()}
任何人都可以帮助我做错了吗?
答案 0 :(得分:3)
正如@ mp911de在评论中所说,Spring Data Couchbase不支持QueryDsl
,这解释了为什么无法创建bean。
在阅读文档时,我可以看到您的困惑来自哪里。第5章是所有Spring Data Store实现的通用内容。所有商店文档都有一章具有相同的内容,通常会讨论存储库的基础知识。所以它可以提到不属于特定实现的东西。
您链接的部分的第一句甚至提示:
多个Spring Data模块通过QueryDslPredicateExecutor提供与Querydsl的集成。
不幸的是,有几个,但不是Spring Data Couchbase模块。
答案 1 :(得分:2)
<强> 2016。 07. 11.:经过一些研究,根据@ mp911de和@ simon-baslé的答案,我们知道Spring Data Couchbase还没有对QueryDsl的支持。
我找到了一个解决方法,我想要解决的问题(动态查询,也就是列表中的过滤器并使其可分页)