Has*_*imR 5 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);`
Run Code Online (Sandbox Code Playgroud)
期望这样的查询:
select * from table where (column1, column2) in ((1,2), (3,4), (5,6))
Run Code Online (Sandbox Code Playgroud)
由于JPA 不支持多列IN子句,我通过对CONCATDB 值(当然还有提供的范围值)使用 SQL 函数来克服这个问题,如下所示:
首先,创建我们寻找的范围:
List<String> columns;
for (i=0, i<column1.size(), i++){
columns.add(column1.get(i) + '-' + column2.get(i));
}
Run Code Online (Sandbox Code Playgroud)
修改查询:
@Query(nativeQuery = true,
value = "select * from table where CONCAT(column1, '-', column2) in (:columns)")
List<Table> findByColumn1Column2In(@Param("columns") List<String> columns);
Run Code Online (Sandbox Code Playgroud)
就这样,你就明白了:-)
小智 1
是的,一个方法中可以有多个“In”子句。
使用 spring data jpa 和 spring boot 我们可以实现这一点,如下所示:
对于您的情况,您只需在存储库中编写以下方法即可正常工作。
List<Table> findByColumn1InAndColumn2In(List<BigDecimal> column1,List<BigDecimal> column2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |