编写命名SQL查询的最佳方法,如果存在行则返回该查询?

Enn*_*oji 1 sql oracle hibernate

所以我有这个SQL查询,

<named-query name="NQ::job_exists">
<query>
select 0 from dual where exists (select * from job_queue);
</query>
</named-query>
Run Code Online (Sandbox Code Playgroud)

我计划使用这样的:

Query q = em.createNamedQuery("NQ::job_exists");
        List<Integer> results = q.getResultList();
        boolean exists = !results.isEmpty();
        return exists;
Run Code Online (Sandbox Code Playgroud)

然而,我在SQL/JPA中并不是很强大,并且想知道是否有更好的方法(或者改进方法).我应该,例如,写(从job_queue jq选择jq.id)而不是使用明星?

编辑:此调用在我们的应用程序中非常重要.

编辑:做了一些性能测试,虽然差异几乎可以忽略不计,但我最终决定采用:

select distinct null
    from dual 
       where exists (
               select null from job_queue
       );
Run Code Online (Sandbox Code Playgroud)

Fer*_*anB 5

如果您使用的是EXISTSOracle,我建议使用null:

select null 
  from dual where exists (select null from job_queue);
Run Code Online (Sandbox Code Playgroud)

以下将是Oracle上成本较低的一个:

select null
  from job_queue
 where rownum = 1;
Run Code Online (Sandbox Code Playgroud)

更新:要包括表上没有行的情况,您可以运行以下查询:

select count(*)
  from (select null
          from job_queue
          where rownum = 1);
Run Code Online (Sandbox Code Playgroud)

使用此查询,您可以获得最佳计划,并且只有两种可能的结果:1如果有行且0没有行.