Couchbase 存储库使用N1QL

Couchbase 存储库使用N1QL,couchbase,spring-data-couchbase,Couchbase,Spring Data Couchbase,我得到以下异常: 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.UnsupportedCouchbaseFeatureEx

我得到以下异常:

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
我使用的是Spring4.2.0.RELEASE和SpringDataCouchbase 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>  {
}
public interface AnswerRepository扩展了BaseRepository{
最终静态字符串设计\u DOCUMENT=“answers”;
@视图(viewName=“answers\u by\u quizId\u startTime”,designDocument=DESIGN\u DOCUMENT)
公共列表findByQuizIdAndStartTime(字符串quizId,长startTime);
应答findbyuid(字符串uuid);
}
@菜豆
公共接口BaseRepository扩展了Crudepository{
}
也许我的Couchbase服务器不支持此功能,而我的存储库需要它

我可能需要以不同的方式编写存储库

可惜这里没有说明哪种方法是无效的

还是我在基类中使用了crudepository


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

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

Couchbase Server 2.5.1
无法访问N1QL
(Couchbase Server4.0附带N1QL,当然也包括全新的4.1版本)

如果希望Spring数据为您实现
findByUuid
,则必须使用
@View
注释该方法,并创建相应的视图,从
应答
文档中发出UUID

视图查询派生受到严格限制,由于您必须编写正确的
映射函数,因此需要做更多的工作:

  • 基于视图的存储库方法只能使用一个条件进行查询
  • 必须正确创建视图,并发出与要查询的条件对应的正确键
  • 您必须为每个实体类创建一个视图,将视图限制为仅在JSON中的“\u class”字段与所述实体匹配时发出(注意:此字段可以在配置中重命名,因此请确保使用相关字段)
这意味着您的
查找的时间和开始时间
也无法工作
。您可能必须在
BaseRepository
中实现这一点(也可能是
findByUuid
),依靠
CouchbaseTemplate
,并使用其
findByView
方法(甚至是
queryView
作为最后手段)

M1文档第7章(上)中提到了
不受支持的TouchBaseFeatureException


另请参见文档后续部分。

使用Couchbase 2.5.1和SDC 2.0.0.M1的这些版本,我还能从Crudepository类中获益吗?假设我修复了存储库方法。或者我必须恢复到旧的SDC版本。现在,如果执行
answer0=answerRepository.save(answer0),我会得到一个
java.lang.StackOverflowerError:null
异常在我的测试中。