在Spring Data Couchbase中定义查询一致性

时间:2017-02-21 17:43:00

标签: spring couchbase n1ql

我尝试建立一个deleteAll函数,删除与给定存储库和类关联的所有文档。为此,我创建了一个自定义N1ql查询。但我希望在以后的数据库操作发生之前更新Couchbase索引。我的猜测是我必须更改查询的一致性级别才能实现此行为。 Herehere我找到了一些使用CouchbaseTemplate执行此操作的示例。但我的模板是空的。谁能告诉我我做错了什么?

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 个答案:

答案 0 :(得分:1)

您的代码段中的存储库和实体并不完全清楚。您使用的是哪个版本的SDC?

如果您正在使用操作映射bean,则使用

获取特定存储库和实体的基础couchbase模板
@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);

确保使用@EnableCouchbaseRepositories启用couchbase存储库。如果您的存储库仅使用couchbase,您还可以直接获取couchbase模板bean。

@Autowired
CouchbaseTemplate template;