2017-02-21 182 views
0

我嘗試建立一個deleteAll函數,該函數刪除與給定存儲庫和類關聯的所有文檔。爲此,我創建了一個自定義N1ql查詢。但是我希望在以後的數據庫操作發生之前更新Couchbase索引。我的猜測是,我必須改變查詢的一致性級別來實現這種行爲。 Herehere我發現了一些使用CouchbaseTemplate的例子。但我的模板是空的。有人能告訴我我做錯了什麼嗎?在Spring Data Couchbase中定義查詢一致性

public void deleteAll() throws DBException { 
    CouchbaseOperations couchbaseTemplate; 
    try { 
     couchbaseTemplate = templateProvider.resolve(getRepository().getClass(), getClassName().getClass()); 
    } catch (Exception e) { 
     throw new DBException("Could not get couchbase client", e); 
    } 

    String statement = String.format("DELETE FROM %s WHERE _class='%s'", 
            couchbaseTemplate.getCouchbaseBucket().name(), getClassName()); 

    ScanConsistency consistency = couchbaseTemplate.getDefaultConsistency().n1qlConsistency(); 
    N1qlParams queryParams = N1qlParams.build().consistency(consistency); 
    N1qlQuery query = N1qlQuery.simple(statement, queryParams); 
    N1qlQueryResult result = couchbaseTemplate.queryN1QL(query); 

    //Result handling 
    } 
} 

templateProvider是自動佈線的。

回答

1

從你的代碼片斷中不完全清楚你的存儲庫和實體。你使用的是哪個版本的SDC?

如果您使用的操作映射豆,你使用

@Repository 
public interface MyRepository extends CrudRepository<MyEntity, String> { 
} 

public class MyService { 
@Autowired 
MyRepository repo; 

@Autowired 
RepositoryOperationsMapping templateProvider; 
.... 
CouchbaseOperations operations = templateProvider.resolve(repo.getClass(),MyEntity.class); 

確保使couchbase儲存庫@EnableCouchbaseRepositories對特定存儲庫和實體基礎couchbase模板。如果您的存儲庫僅使用couchbase,那麼您也可以直接獲取couchbase模板bean。

@Autowired 
CouchbaseTemplate template; 
相關問題