有效地查询HQL中是否存在

时间:2011-03-21 06:28:09

标签: hibernate hql

我有一个班级Employee,有三个班级成员: id,isVisible,sectionId

我想在HQL中查询:

  1. 如果某个部分有任何员工
  2. 如果是这样 - 隐藏该部分内的所有员工。
  3. 现在我正在做类似的事情:

    SELECT count(e.id), count(nullif(e.isVisible,0)) 
            from Employee e where sectionId = :sectionId
    

    但计数效率不高,因为需要全表扫描,而且我不需要计算数字。

    我可以做两个查询。

    通过运行简单的选择并将结果数限制为单个结果来查询员工部分:

    SELECT e.id from Employee e where sectionId = :sectionId
    

    如果返回结果,请查询可见部分中的第一个雇员:

    SELECT e.id from Employee e where visible = 1 and sectionId = :sectionId
    

    我的问题是:我可以在一个查询中进行两项检查吗?

1 个答案:

答案 0 :(得分:0)

由于您只对从每个查询中获取一行感兴趣,因此您可以将它们全部连接起来以使用两列返回单行。您需要将Employee别名为E1和E2。