我所拥有的是大量(如数十万)ID 列表。我想通过 JPA 查询从具有此 ID 的对象中获取一些值。
选项 1 - 使用 IN 子句
List<Long> ids = /* ... */
entityManager.createQuery(
"SELECT v.lat, v.lon FROM Vehicle v WHERE v.id IN (:ids)",
Long[].class)
.setParameter("ids", ids)
.getResultList();
恐怕IN
条款内容可能会有限制。
选项 2 - 分别查询每个 ID
List<Long> ids = /* ... */
for (Long id : ids) {
entityManager.createQuery(
"SELECT v.lat, v.lon FROM Vehicle v WHERE v.id = :id",
Long[].class)
.setParameter("id", id)
.getSingleResult();
}
这看起来太慢了,因为似乎在做ids.size()
请求。
做这种事情的正确方法是什么?