Java 在couchbase N1Ql@query中使用IN子句,或使用couchbase JPA中的findAll(键)
我正在使用SpringCouchbase JPA,并试图通过提供一个密钥列表来获取文档。我的存储库结构看起来像Java 在couchbase N1Ql@query中使用IN子句,或使用couchbase JPA中的findAll(键),java,couchbase,n1ql,spring-data-couchbase,Java,Couchbase,N1ql,Spring Data Couchbase,我正在使用SpringCouchbase JPA,并试图通过提供一个密钥列表来获取文档。我的存储库结构看起来像 public interface EmployeeRepo extends CouchbasePagingAndSortingRepository<Employee, String>, EmployeeCustomRepo { 甚至我也尝试将我的密钥列表包装到一个可移植对象。但例外情况仍然是一样的 public List<Employe
public interface EmployeeRepo
extends CouchbasePagingAndSortingRepository<Employee, String>, EmployeeCustomRepo {
甚至我也尝试将我的密钥列表包装到一个可移植对象。但例外情况仍然是一样的
public List<Employee> findAllById(List<String> empIds) {
Iterable<String> itrKeys = empIds;
return employeeRepo.findAll(itrKeys);
}
公共列表findAllById(列表empid){
Iterable itrKeys=empIds;
返回employeeRepo.findAll(itrKeys);
}
此外,我还尝试将N1QL与@queryover方法结合使用
@Query("#{#n1ql.selectEntity} WHERE meta().id IN $ids AND #{#n1ql.filter}")
Collection<ProductCopy> findAllById(@Param("ids") JsonArray ids);
@Query(#{n1ql.selectEntity}其中meta().id在$ids和#{n1ql.filter})中)
集合findAllById(@Param(“ids”)JsonArray id);
我将我的密钥列表转换为JsonArray。
上面的findallbyd()方法不会引发任何异常,但即使我有匹配的键,也不会给出任何文档
@Query("#{#n1ql.selectEntity} USE KEYS ($ids) ")
Collection<ProductCopy> findByIdIn(@Param("ids") JsonArray ids);
@Query(“{n1ql.selectEntity}使用键($id)”)
集合findByIdIn(@Param(“ids”)JsonArray ids);
在执行findByIdIn()时,我得到了这个异常
n1ql错误:{“msg”:“缺少主键或主键无效
My question is why findAll(Iterable id)/findAll(List id) is not working,when findOne(String id) works smooth and how do I create a parameterized N1QL query which can take multiple items in an IN statement?
我的问题是为什么findAll(Iterable id)/findAll(List id)不工作,当findOne(String id)工作顺利时,以及如何创建一个可以在in语句中接受多个项的参数化N1QL查询?
尝试添加@N1qlPrimaryIndexed和@ViewIndexed注释,如以下示例所示:
@N1qlPrimaryIndexed
@ViewIndexed(designDoc = "businessUnity")
public interface BusinessUnityRepository extends CouchbaseRepository<BusinessUnity, String>{
List<BusinessUnity> findByCompanyId(String companyId);
}
@N1qlPrimaryIndexed
@视图索引(designDoc=“businessUnity”)
公共接口BusinessUnityRepository扩展CouchbaseRepository{
列出findByCompanyId(字符串companyId);
}
此外,您还可以查看本教程:
非常感谢@deniswsrosa。它工作得很顺利。请您解释一下它到底做了什么。N1QLPrimaryIndex确保与当前存储库关联的存储桶将具有N1QL主索引。ViewIndexed为该实体生成一个视图,以避免扫描整个存储桶 My question is why findAll(Iterable id)/findAll(List id) is not working,when findOne(String id) works smooth and how do I create a parameterized N1QL query which can take multiple items in an IN statement?
@N1qlPrimaryIndexed
@ViewIndexed(designDoc = "businessUnity")
public interface BusinessUnityRepository extends CouchbaseRepository<BusinessUnity, String>{
List<BusinessUnity> findByCompanyId(String companyId);
}