当尝试搜索单个记录时,此查询有效
@Query(value = "select * from table t where t.column1 = :column1 and t.column2 = :column2 and t.column3 = :column3")
Flux<Invoice> findByMultipleColumn(@Param("column1”) String column1, @Param("column2”) String column2, @Param("column3”) String column3);
但是,当我有一个标准列表,而不是一个单行条件,然后我必须循环的标准列表和调用上述查询多次,这是不可行的解决方案。
须藤码
for (Criteria criteria : criteriaList) {
repository.findByMultipleColumn(criteria.getColumn1(), criteria.getColumn2(), criteria.getColumn3());
}
我试图找到一种方法来解决上述查询的多个列表的所有3列条件对,如下所示(这不是工作解决方案)
@Query(value = "select * from table t where t.column1 = :column1 and t.column2 = :column2 and t.column3 = :column3")
Flux<Invoice> findByMultipleColumn(@Param List<Table> table);
有没有什么方法可以达到上述的情况呢?
1条答案
按热度按时间toe950271#
如果第1、2和3列是嵌入式的,则可以执行
这将生成以下本机SQL子句
如果您不想将这些字段i打包到可嵌入类中,您也可以尝试做一个变通方案
它当然不是防弹的,三根柱子都可以“;“作为它们的值,如果它们的类型不是字符串等,则可能会出现问题。
编辑:
第三种选择是使用规范API。使用条件构建器,您可以连接多个查询和/或查询。并将规范作为参数传递给扩展JpaSpecificationExecutor的存储库(如果要获取整个实体)或实体管理器(如果要使用投影)。Read more about specifications