存储库使用 N1QL

Repository uses N1QL

我遇到以下异常:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'answerRepository': Invocation of init method failed; nested exception is org.springframework.data.couchbase.core.UnsupportedCouchbaseFeatureException: Repository uses N1QL

我正在使用 Spring 4.2.0.RELEASE 和 spring-data-couchbase 2.0.0.M1 针对 Couchbase 2.5.1 企业版 (build-1083)

我在文档中看不到此错误的任何解释。

这是存储库:

public interface AnswerRepository extends BaseRepository<Answer, String> {

  final static String DESIGN_DOCUMENT = "answers";

  @View(viewName = "answers_by_quizId_startTime", designDocument = DESIGN_DOCUMENT)
  public List<Answer> findByQuizIdAndStartTime(String quizId, long startTime);

  Answer findByUuid(String uuid);

}

@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable> extends CrudRepository<T, ID>  {
}

也许我的 Couchbase 服务器不支持此功能,而我的存储库需要它。

我可能需要对我的存储库进行不同的编码。

可惜这里没有说哪个方法无效

或者是我在基础中使用了 CrudRepository class ?

我想知道如何找出它希望在我的 Couchbase 服务器中找到哪些视图。

Spring Data Couchbase 2.0 中的存储库几乎完全依赖 ViewsN1QL。 N1QL 使此版本中的大量新功能成为可能,它现在是默认机制 Spring 数据用于诸如 "query derivation" 之类的事情(通过生成某种查询来实现存储库方法派生自方法名称)。

Couchbase Server 2.5.1 无法访问 N1QL(它随 Couchbase Server 4.0 一起提供,当然也在全新的 4.1 版本)。

如果您希望 Spring 数据为您实现 findByUuid,您必须使用 @View 注释该方法并创建适当的视图以从您的 Answer 文档。

查看查询派生受到严格限制,并且由于您必须编写正确的 map function:

,因此您需要做更多的工作
  • 基于视图的存储库方法只能使用一个条件进行查询
  • 您必须正确创建您的视图,发出与您要查询的条件相对应的正确键。
  • 您必须为每个实体创建一个视图 class,限制视图仅在 [=] 中的“_class”字段时发出62=] 匹配所述实体(注意:此字段可以在配置中重命名,因此请确保使用相关的)。

所以这意味着你的findByQuizIdAndStartTime也不能工作。您可能必须在 BaseRepository 中实现这个(可能 findByUuid),依赖于 CouchbaseTemplate 并使用其 findByView 方法(甚至 queryView 作为最后的手段)。

M1 文档第 7 章(N1QL based querying)中提到了 UnsupportedCouchbaseFeatureException

另请参阅文档下方 view query derivation 部分。