我有一个查询来确定一个值是否已经存在于数据库中。在将资源插入数据库之前,我用它来验证资源。看起来是这样的:
@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()不是我需要的正确语法,而且我希望让它更快,并在找到值后返回,而不是循环遍历数据库上的每一行。任何建议将不胜感激。
也许您可以考虑使用分页来提高速度。
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();
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 子句