存储库使用 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 中的存储库几乎完全依赖 Views
和 N1QL
。 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 部分。
我遇到以下异常:
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 中的存储库几乎完全依赖 Views
和 N1QL
。 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 部分。