多列IN子句弹簧数据jpa

时间:2016-06-02 05:09:38

标签: java jpa spring-data-jpa

是否可以在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))

3 个答案:

答案 0 :(得分:0)

是的,一个方法中可能有多个“ In” 子句。

使用spring数据jpa和spring boot,我们可以实现以下目标:

对于您而言,您可以在存储库中编写以下方法,即可正常工作。

List<Table> findByColumn1InAndColumn2In(List<BigDecimal> column1,List<BigDecimal> column2);

答案 1 :(得分:0)

IN尚不支持带有Spring data子句的多列。您可以使用@Query注解进行自定义查询,如下所示:

  

@Query(“从MyObject中选择o,其中id在:ids中”)   列出findByIds(@Param(“ ids”)列出ventoryIdList);

答案 2 :(得分:0)

JPA doesn't support multi-columns IN clauses起,我通过在数据库值上以及当然在提供的范围值上使用SQL CONCAT函数来克服此问题,如下所示:

首先,创建我们要查找的范围:

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);

在那里,你钉:-)