2016-07-01 65 views
2

我想用QueryDslPredicateExecutor接口创建UserTask实体的可筛选列表,因此查询字符串中给出的参数将自动处理为Predicate。SpringBoot Couchbase集成

我有以下类/接口

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); 
    } 

} 

要生成QUERTask我添加了follo翼线的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!

我想我的注释与UserTaskQuerydslRepository @NoRepositoryBean,它解决了我的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()}

谁能帮我我做了什么错?

+0

春数据Couchbase没有QueryDsl支持,因此库不能被实现为bean,所以Spring不能注入存储库bean。 – mp911de

+0

理论上它有http://docs.spring.io/spring-data/couchbase/docs/current/reference/html/#core.extensions.querydsl – aBnormaLz

+0

你的Spring配置是什么样的? 也许你有多个Spring上下文?您也可以通过查看日志来验证存储库bean是否已创建。 – Jeremy

回答

3

As @ mp911de在他的评论中表示,Spring Data Couchbase不支持QueryDsl,这就解释了为什么无法创建bean。

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

你甚至挂一节的第一句暗示了它:

Several Spring Data modules offer integration with Querydsl via QueryDslPredicateExecutor.

一些,但不是春数据Couchbase模块很遗憾。

+0

我做了一个库来构建动态的N1QL查询。请看看,如果你觉得它有用,可以在spring-data-couchbase中使用它。 https://github.com/TeamWanari/couchbase-query-executor – aBnormaLz

2

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

我发现,我想解决这个问题的一个解决方法(动态查询,亦称过滤器列表上,并使其可分页)

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

相关问题