假设我有一个id列表(作为参数,而不是表)和一个包含实体及其id的表。
参数列表: ids:1,2,3,4
表-实体: ids: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*);
答案 0 :(得分:1)
不幸的是,FROM
子句中不允许使用参数。您需要选择所有ID并在内存中过滤它们。对于0-1000个元素,这不应该太昂贵。