Java 如何在JPQL中找到第一个

Java 如何在JPQL中找到第一个,java,database,jpa,jpql,Java,Database,Jpa,Jpql,我有一个查询来查找数据库中是否已经存在一个值。在将资源插入数据库之前,我使用它来验证资源。 看起来是这样的: @NamedQuery(name = "findByName", query = "SELECT g FROM Group g where g.value= :value") 在数据访问方面,实施如下: final TypedQuery<Group> query = entityManager.createNamedQuery("findByName", Group.c

我有一个查询来查找数据库中是否已经存在一个值。在将资源插入数据库之前,我使用它来验证资源。 看起来是这样的:

  @NamedQuery(name = "findByName", query = "SELECT g FROM Group g where g.value= :value")
在数据访问方面,实施如下:

final TypedQuery<Group> query = entityManager.createNamedQuery("findByName", Group.class);
    query.setParameter("value", value);
    return !query.getResultList().isEmpty();
final TypedQuery query=entityManager.createNamedQuery(“findByName”,Group.class);
query.setParameter(“值”,value);
回来!query.getResultList().isEmpty();
它确实有效,但我认为query.getResultList().isEmpty()不是我需要的正确语法,而且我希望它更快,在找到值后返回,而不是遍历数据库中的每一行。
如果您有任何建议,我们将不胜感激。

也许您可以考虑使用来提高速度

query.setMaxResults(1.getResultList()
setFirstResult()
您有两个选项:

  • 使用
    COUNT
    功能:

    @NamedQuery(name = "findByName", query = "SELECT COUNT(g) FROM Group g where g.value= :value")
    
    这样就消除了创建实际实体(加上快速加载等)的代价

  • 使用
    TypedQuery.setMaxResults()
    将检索到的最大结果数设置为1

    query.setMaxResults(1);
    
    • 那么:

       @NamedQuery(name = "existsByName", query = "SELECT CASE WHEN COUNT(g) > 0 THEN true ELSE false END FROM Group g where g.value= :value")
      
      boolean exists = entityManager.createNamedQuery("existsByName",Boolean.class).setParameter("value",value).getSingleResult();
      

      你想过伯爵吗?你想过伯爵吗?不幸的是,春天不是我们的选择,因为我们走了另一条路。现在做一个计数肯定会提高一点。但是,我仍然不能确定此查询的query.getResultList()是否正确。干杯,看起来也很干净。非常感谢你。