繁体   English   中英

多列 IN 子句 spring 数据 jpa

[英]Multiple column IN clause 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))

由于JPA 不支持多列IN子句,我通过在 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);

然后你就搞定了:-)

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

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

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

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

对于您的情况,您可以在您的存储库中编写以下方法,它会正常工作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM