Spring Data JPA支持使用规约来计算实体的数量。但是它是否有使用方法名称解析来计算实体数量的方法呢?比如说我想要一个名为countByName
的方法,用于计算特定名称的实体数量,就像一个名为findByName
的方法可以获取所有具有特定名称的实体一样。
Spring Data JPA支持使用规约来计算实体的数量。但是它是否有使用方法名称解析来计算实体数量的方法呢?比如说我想要一个名为countByName
的方法,用于计算特定名称的实体数量,就像一个名为findByName
的方法可以获取所有具有特定名称的实体一样。
如果有人想要根据多个条件获取计数,那么这里是一个示例自定义查询
@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);
在我看来,其他的解决方案并没有回答这个问题。根据这句话
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);