【发布时间】: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