1

我收到以下异常:

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 ?

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

4

1 回答 1

2

Spring Data Couchbase 2.0 中的存储库几乎完全依赖于ViewsN1QL. N1QL 使此版本中的大部分新功能成为可能,它现在是 Spring Data 用于“查询派生”之类的默认机制(通过生成某种从方法名称派生的查询来实现存储库方法)。

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

如果您希望 Spring DatafindByUuid为您实现,则必须使用该方法注释@View并创建从Answer文档中发出 uuid 的适当视图。

查看查询派生受到严格限制,因为您必须编写正确的代码,因此需要做更多的工作map function

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

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

UnsupportedCouchbaseFeatureException在 M1 文档第 7 章(基于N1QL 的查询)中提到了这一点。

另请参阅文档后面的视图查询派生部分。

于 2015-12-16T12:47:53.163 回答