2015-12-15 41 views
1

,我發現了以下異常:庫使用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與彈簧數據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服務器中找到哪些視圖。

回答

2

Spring數據庫Couchbase 2.0幾乎完全依賴於ViewsN1QL。這個版本中的一大部分新功能都是由N1QL實現的,它現在是Spring Data用於「查詢派生」的默認機制(通過生成某種從方法名派生的查詢來實現儲存庫方法)。

Couchbase Server 2.5.1沒有獲得N1QL(與Couchbase服務器來4.0,當然也是在全新的4.1版本)。

如果您希望Spring Data爲您實施findByUuid,則必須使用@View註釋該方法,並創建從Answer文檔發出uuids的相應視圖。

查看查詢的推導是嚴格限制,給你更多的工作,因爲你必須寫正確map function

  • 存儲庫方法基於視圖只能與一個標準查詢。
  • 你必須正確地創建你的視圖,發出正確的關鍵字對應你將要查詢的標準。
  • 您必須創建每個實體類的一個視圖,限制視圖僅在JSON中的「_class」字段與所述實體匹配時發出(注意:此字段可以在配置中重命名,因此請確保使用相關的)。

因此,這意味着你的findByQuizIdAndStartTime不能工作,要麼。您可能必須在BaseRepository中實施(也可能爲findByUuid),依賴於CouchbaseTemplate並使用其方法findByView(或甚至queryView作爲最後的手段)。

UnsupportedCouchbaseFeatureException在M1文檔第7章(在N1QL based querying上)中提及。

另請參閱關於view query derivation的文檔。

+0

我還可以使用這些版本的Couchbase 2.5.1和SDC 2.0.0.M1從CrudRepository類中獲益嗎?說如果我修復存儲庫方法。或者我必須恢復到較舊的SDC版本。現在我得到一個'java.lang.StackOverflowError:null'異常,如果我在我的測試中做了一個'answer0 = answerRepository.save(answer0);'。 – Stephane