我收到以下异常:
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服务器中找到哪些视图。
答案 0 :(得分:2)
Spring Data Couchbase 2.0中的存储库几乎完全依赖于Views
和N1QL
。 N1QL使这个版本中的很多新功能成为可能,N1QL现在是Spring Data用于&#34;查询派生&#34;等内容的默认机制。 (通过生成从方法名称派生的某种查询来实现存储库方法)。
Couchbase Server 2.5.1
无法访问N1QL (Couchbase Server 4.0 附带,当然也有全新的4.1版本)。
如果您希望Spring Data为您实施findByUuid
,则必须使用@View
为该方法添加注释,并创建从Answer
文档中发出uuids的相应视图
查看查询派生受到严格限制并为您提供更多工作,因为您必须编写正确的map function
:
这意味着您的findByQuizIdAndStartTime
无法正常工作。您可能必须在findByUuid
中实施此操作(可能BaseRepository
),依赖CouchbaseTemplate
并使用其findByView
方法(甚至queryView
作为不得已)。
M1文档第7章(N1QL based querying)中提到了UnsupportedCouchbaseFeatureException
。
另请参阅文档中的view query derivation部分。