我尝试建立一个deleteAll函数,删除与给定存储库和类关联的所有文档。为此,我创建了一个自定义N1ql查询。但我希望在以后的数据库操作发生之前更新Couchbase索引。我的猜测是我必须更改查询的一致性级别才能实现此行为。 Here和here我找到了一些使用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
已自动装配。
答案 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;