如何使用Spring JPA Repository进行计数区分

12

如何使用Spring Data JPA进行唯一计数?我不想使用@Query注释。 相当的SQL查询是:

SELECT COUNT(DISTINCT rack) FROM store WHERE id = 10001;

我尝试通过编写以下查询来解决问题,但它无法正常工作:

int countDistinctRackById();
3个回答

8

这应该可以工作:

Integer countDistinctRackById(Long id);

我刚刚测试了这种方法,但它没有起作用(Spring Boot 2.2.2)。请提供更多信息。 - RomanMitasov
你能提供更多信息吗?例如实体类、仓库方法等。 - Ilias Mentz
1
当然。我的仓库扩展自JpaRepository,实体类有字段customerIddecision,我需要获取决策代码为所需值之一的客户的不同计数。我给方法命名为countDistinctCustomerIdByDecisionIn,但生成的SQL不是select count(distinct CUSTOMER_ID) ...而是select distinct count(distinct ID) ... - RomanMitasov
不确定是否有帮助,但这看起来像是与“In”关键字有关的问题。我需要更多信息才能提供帮助(方法的返回类型、实体的字段类型等)。 - Ilias Mentz
3
该方法实际上并没有产生所选字段的不同计数,它返回的是主键的不同计数,并完全忽略了字段名部分。 - The Shoe Shiner

5

根据Spring文档的说明,尝试以下操作:

Integer countDistinctRackById(String id);

用实际的机架字段名称替换单词Rack


2
我刚试了一下,所有的回答都不起作用。以下查询:
整数countDistinctRackById(字符串id);
将渲染出这样的结果:
从表table0_选择distinct count(table0_.rack) as col_0_0_ where table0_.id=?
由于我当前使用的是Spring Boot 1.2.3,我不知道以后是否有任何更改,但要实现计数不同,我必须定义一个自定义查询:
@Query("Select count(distinct rack) from Table t where t.id = ?1")

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