2017-02-21 177 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; 
相关问题