【问题标题】:Multiple column IN clause spring data jpa多列IN子句spring数据jpa
【发布时间】:2021-10-15 12:54:24
【问题描述】:

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

【问题讨论】:

标签: java jpa spring-data-jpa


【解决方案1】:

由于JPA doesn't support multi-columns IN clauses,我通过对 DB 值使用 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);

然后你就知道了:-)

【讨论】:

    【解决方案2】:

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

    @Query("select o from MyObject o where id in :ids") List findByIds(@Param("ids") List inventoryIdList);

    【讨论】:

      【解决方案3】:

      是的,一个方法中可以有多个 "In" 子句。

      使用 spring data jpa 和 spring boot 我们可以实现如下:

      对于您的情况,您只需在存储库中编写以下方法即可。

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

      【讨论】:

        猜你喜欢
        • 2016-09-08
        • 1970-01-01
        • 2020-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-08
        • 2016-04-29
        相关资源
        最近更新 更多