在 Spring Data Couchbase 中定义查询一致性
Defining query consistency in Spring Data Couchbase
我尝试建立一个 deleteAll 函数,该函数删除与给定存储库和 class 关联的所有文档。为此,我创建了一个自定义 N1ql 查询。但我希望在以后的数据库操作发生之前更新 Couchbase 索引。我的猜测是我必须更改查询的一致性级别才能实现此行为。
Here and 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
是自动装配的。
从您的代码片段中无法完全清楚您的存储库和实体。您使用的是哪个版本的 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;
我尝试建立一个 deleteAll 函数,该函数删除与给定存储库和 class 关联的所有文档。为此,我创建了一个自定义 N1ql 查询。但我希望在以后的数据库操作发生之前更新 Couchbase 索引。我的猜测是我必须更改查询的一致性级别才能实现此行为。 Here and 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
是自动装配的。
从您的代码片段中无法完全清楚您的存储库和实体。您使用的是哪个版本的 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;