我有一张看起来像这样的桌子:
id | A | B |
---|---|---|
1 | A1 | B1 |
2 | A1 | B2 |
3 | A2 | B2 |
4 | A2 | B3 |
然后我有一个项目列表,我想为其查找相应的数据库行。例如,我可能有(以 JSON 的形式)
[
{
"A": "A1",
"B": "B4",
},
{
"A": "A1",
"B": "B2",
}
]
现在应该返回 ID 为 2 的行。我要查询数据库的这些项目可能有数千个。
我天真地想到了
findAllByAinAndBIn(List<A> aValues, List<B> bValues)
但这不起作用,因为它找不到第 n 个元素与第 n 个元素比较的行。我该怎么办?
最简单的方法是创建一个串联的 ID 列表,然后使用 JPQL 查询将它们与数据库进行比较。
1。创建 ids 的串联列表
List<String> matches = jsonArrayList.stream().map(e -> e.getA() + ":" + movie.getB()).toList();
2。创建 JPQL 查询以将串联的 id 与数据库进行比较
@Query("select m from Entity m where CONCAT(m.a, ':', m.b) IN (:matches)")
List<CustomProjection> findAllMatchingRows(@Param("matches") List<String> matches);