是否可以在IN
子句中有多列?
@Query(nativeQuery = true, value = "select * from table where (column1, column2) in (:column1, :column2)")
List<Table> findByColumn1Column2In(@Param("column1") List<BigDecimal> column1, @Param("column2") List<BigDecimal> column2);`
期待这样的查询:
select * from table where (column1, column2) in ((1,2), (3,4), (5,6))
由于JPA不支持多列IN
子句,我通过在DB值上使用SQLCONCAT
函数来克服这个问题,当然,在提供的范围值上,如下所示:
首先,创建我们要查找的范围:
List<String> columns;
for (i=0, i<column1.size(), i++){
columns.add(column1.get(i) + '-' + column2.get(i));
}
修改查询:
@Query(nativeQuery = true,
value = "select * from table where CONCAT(column1, '-', column2) in (:columns)")
List<Table> findByColumn1Column2In(@Param("columns") List<String> columns);
在那里你钉住了:-)
Spring data
尚不支持包含IN
子句的多列。您可以使用@Query
注释进行自定义查询,如下所示:
@Query("select o from MyObject o where id in: ids")List findByIds(@Param("ids")List InvoryIdList);
是的,一个方法中可能有多个“In”子句。
使用Spring数据jpa和Spring引导,我们可以实现以下目标:
对于您的情况,您可以在存储库中编写以下方法,它会很好地工作。
List<Table> findByColumn1InAndColumn2In(List<BigDecimal> column1,List<BigDecimal> column2);