【发布时间】:2018-02-02 19:09:35
【问题描述】:
假设我有一个 id 列表(作为参数,而不是表)和一个包含实体及其 id 的表。
参数列表: id: 1,2,3,4
表实体: 编号:1,3,4
现在我想查找我的参数列表中所有未存储在数据库中的缺失值,在本例中为:id 2。
我想到的简单且重载的功能是查询每个 id 是否存在...如果不存在则将其添加到结果中。
public List<long> findMissing(List<long> ids) {
List<long> missing = new ArrayList<long>();
for (long id : ids) {
if (!dao.exists(id))
missing.add(id);
}
return missing;
}
...但我认为这是一个坏主意,如果列表增长(我们谈论的是 0 - 1000 个元素)。
我想知道有没有这样的HQL函数:
SELECT t FROM (:ids) t
WHERE t not in
(SELECT e.id FROM MyEntity e
WHERE *maybe some conditions*);
【问题讨论】:
-
很遗憾,
FROM子句中不允许使用参数。您将需要选择所有 id 并在内存中过滤它们。对于 0-1000 个元素,这应该不会太昂贵 -
我担心这将是答案。然后我将进行内存过滤。我在 O(n) 中找到了一个 removeAll 版本
-
@crizzis 你能把这个作为答案发布吗?谢谢