Hibernate(HQL)查找参数列表

时间:2018-02-02 19:09:36

标签: java sql hibernate jpa

假设我有一个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*);

1 个答案:

答案 0 :(得分:1)

不幸的是,FROM子句中不允许使用参数。您需要选择所有ID并在内存中过滤它们。对于0-1000个元素,这不应该太昂贵。