【问题标题】:Hibernate (HQL) find missing ids of a parameter listHibernate (HQL) 查找参数列表的缺失 ID
【发布时间】: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 你能把这个作为答案发布吗?谢谢

标签: java sql hibernate jpa


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-06-17
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多