【发布时间】:2013-01-24 08:04:54
【问题描述】:
我拥有的是大量(如数十万)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() 请求。
做这种事情的正确方法是什么?
【问题讨论】:
-
只是一个评论。请注意,
IN (id1, id2, id3, ..., idN)语法可能有限制。例如。在 Oracle 上,此类列表中有 1000 个 id 的人为限制。
标签: java sql jpa entitymanager