Spring Data JPA有没有使用方法名解析计算实体数量的方法?

189

Spring Data JPA支持使用规约来计算实体的数量。但是它是否有使用方法名称解析来计算实体数量的方法呢?比如说我想要一个名为countByName的方法,用于计算特定名称的实体数量,就像一个名为findByName的方法可以获取所有具有特定名称的实体一样。


7
请接受其中一个答案,YaoFeng。我已经测试了Spring Data JPA 1.5.2,并且像Abel所说的那样,countByName()语法是有效的。 - nullPainter
13个回答

1
我只使用它工作了几周,但我不认为这是严格可能的,但您应该能够通过更多的努力获得相同的效果;只需编写查询并注释方法名称即可。在我看来,这可能并不比自己编写方法简单,但更加清晰。
编辑:根据DATAJPA-231,现在已经可以实现。

1

如果有人想要根据多个条件获取计数,那么这里是一个示例自定义查询

@Query("select count(sl) from SlUrl sl where sl.user =?1 And sl.creationDate between ?2 And ?3")
    long countUrlsBetweenDates(User user, Date date1, Date date2);

0

在我看来,其他的解决方案并没有回答这个问题。根据这句话

Spring Data JPA支持使用规范计算实体数量。

他想要使用带有名称解析的JPA规范。所有的答案都指向了没有规范的API。

据我所知,没有带有规范和名称解析的存储库实现。JpaSpecificationExecutor不支持它。

我曾经遇到过同样的问题,并创建了一个自定义存储库,在其中使用了类似以下代码的代码:

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);

Root<S> root = query.from(domainClass);
Path<Object> attribute = root.get(attributeName);
query.select(builder.countDistinct(attribute));

if(spec == null){
    return em.createQuery(query);
}

Predicate predicate = spec.toPredicate(root, query, builder);

if(predicate != null){
    query.where(predicate);
}

return em.createQuery(query);

变量“attributeName”是一个字符串,它包含属性的名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接