当前位置: 首页 > 知识库问答 >
问题:

如何在 JPQL 中查找第一个

屠锦
2023-03-14

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

  @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();

它确实有效并完成工作,但是我认为query.getResultList(.isEmpty()不是我需要的正确语法,而且我希望让它更快,并在找到值后返回,而不是循环遍历数据库上的每一行。任何建议将不胜感激。

共有3个答案

白和泽
2023-03-14

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

query.setMaxResults(1). getResultList()setFirstResult()

尚安平
2023-03-14

你有两个选择:

>

  • 使用COUNT函数:

    @NamedQuery(name = "findByName", query = "SELECT COUNT(g) FROM Group g where g.value= :value")
    

    这消除了创建实际实体的惩罚(加上急切的加载等)

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

    query.setMaxResults(1);
    

  • 司徒隐水
    2023-03-14

    怎么样:

     @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();
    
     类似资料:
    • null JPQL中是否存在检查UUID空值的问题?

    • 我有以下实体: 在一个查询中完成是可能的?

    • 我想知道JPQL是否可以嵌套查询。我正在学习Spring Data JPA,我也上传了几个相关的问题。 如果MySQL中有以下sql,我如何生成JPQL: 我有两个实体。 上面的实体有一个@OneTo多集合,集合实体在下面。 我想得到不到10个孩子的作弊实体。

    • 问题内容: 假设我有以下形式的numpy数组: 我想找到第一个索引(对于每一列)的索引,其中值非零。 因此,在这种情况下,我希望返回以下内容: 我该怎么办? 问题答案: 首次出现的指标 使用沿轴(零轴这里列)非零的面具拿到第一的指标(真实值) 扩展到涵盖通用轴说明符,并且在沿着该轴找不到元素的非零的情况下,我们将有一个类似的实现- 请注意,由于所有值都会返回,因此如果需要的话,我们将直接使用生成最

    • 问题内容: 在Hibernate 3中,有没有办法等效于以下HQL中的MySQL限制? 如果可能,我不想使用setMaxResults。这肯定在较旧的Hibernate / HQL版本中是可行的,但似乎已经消失了。 问题答案: 几年前,当有人问到为什么它在Hibernate 2中有效但在Hibernate 3中无效时,此消息发布在Hibernate论坛上: 在HQL中, 从不 支持Limit 子句