我正在使用Spring couchbase JPA,并试图通过提供密钥列表来获取文档。我的存储库结构类似
public interface EmployeeRepo
extends CouchbasePagingAndSortingRepository<Employee, String>, EmployeeCustomRepo {
我有一个员工ID列表来搜索和获取相应的文档。我尝试使用curdRepository中的方法
public List<Employee> findAllById(List<String> empIds) {
return employeeRepo.findAll(empIds);
}
但我得到的例外是:
org.springframework.dao.InvalidDataAccessResourceUsageException:
View employee/all does not exist.; nested exception is
com.couchbase.client.java.error.ViewDoesNotExistException: View
employee/all does not exist.
甚至我也尝试将我的键列表包装到一个Iterable对象。但例外情况仍然是一样的。
public List<Employee> findAllById(List<String> empIds) {
Iterable<String> itrKeys = empIds;
return employeeRepo.findAll(itrKeys);
}
此外,我尝试使用N1QL和@query over方法
@Query("#{#n1ql.selectEntity} WHERE meta().id IN $ids AND #{#n1ql.filter}")
Collection<ProductCopy> findAllById(@Param("ids") JsonArray ids);
我将我的键列表转换为JsonArray。上面的findAllById()方法不会引发任何异常,但即使我有匹配的键也不会给出任何文档。
@Query("#{#n1ql.selectEntity} USE KEYS ($ids) ")
Collection<ProductCopy> 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?
尝试添加@N1qlPrimaryIndex和@ViewIndexed注释,如以下示例所示:
@N1qlPrimaryIndexed
@ViewIndexed(designDoc = "businessUnity")
public interface BusinessUnityRepository extends CouchbaseRepository<BusinessUnity, String>{
List<BusinessUnity> findByCompanyId(String companyId);
}
此外,您还可以查看本教程:
https://blog.couchbase.com/couchbase-spring-boot-spring-data/
问题内容: 为什么以下SQL不能给我任何东西 虽然 吸引我的行 问题答案: 您可以根据需要执行一些动态SQL,但我认为这并不是真正的竞争。
问题内容: 我正在使用iBATIS创建选择语句。现在,我想用iBATIS实现以下SQL语句: 使用以下方法,语句准备不正确,并且没有结果返回: iBATIS似乎重新构建了该列表,并尝试将其解释为字符串。 如何正确使用IN子句? 问题答案: 这是一篇博客文章,回答您的问题: iBatis:使用SQL IN关键字支持数组或列表参数 在Java中,您应该传入java.util.List。例如
问题内容: 哪种方法更好?使用元组,例如: 或清单,例如: 建议将哪一种用于此类用途,以及为什么使用(出于逻辑和性能考虑)? 问题答案: CPython解释器 将第二种形式替换为第一种形式 。 这是因为从常量加载元组是一个操作,但是列表将是3个操作;加载两个整数内容并构建一个新的列表对象。 由于您使用的是无法到达的列表文字,因此它将替换为元组: 这里第二字节码负载一个元组为常数,在 一个 步骤。将
如何使用hibernateTemplate执行批量更新操作。下面的代码抛出 原因:org。冬眠QueryParameterException:位置超出已声明序数参数的数量。请记住,序数参数是基于1的!职位:2 如何通过将用户列表作为参数传递来实现此批量更新操作???
问题内容: 这是我第一次使用JDBCTemplates,并且遇到了需要使用如下查询的情况: 我怎么做?我已经尝试过传递列表/数组值,但是没有成功,我遇到了异常。我当前的代码如下所示: Spring文档指出,除了生成所需数量的“?”之外,没有其他方法可以这样做。占位符以匹配参数List的大小。有解决方法吗? 问题答案: 我认为您不能将其作为单个“?”来完成。与Spring JDBC模板无关,它是核心
问题内容: 今天,我发布了这样一个查询的答案 另一个用户已将答案发布到这样的查询中 如您所见,column_name和值的位置互换了。 从Mysql Docs expr IN(值,…) 如果expr等于IN列表中的任何值,则返回1;否则返回0。如果所有值都是常量,则根据expr的类型对它们进行求值并进行排序。然后使用二进制搜索完成对项目的搜索。这意味着如果IN值列表完全由常量组成,则IN非常快。