JPA 存储库查询返回具有第 n 到第 n 关系的所有行

问题描述 投票:0回答:1

我有一张看起来像这样的桌子:

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 个元素比较的行。我该怎么办?

java spring postgresql jpa spring-data-jpa
1个回答
0
投票

最简单的方法是创建一个串联的 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);
© www.soinside.com 2019 - 2024. All rights reserved.