Как различать подсчет с помощью репозитория Spring JPA

Как сделать отдельный подсчет с помощью Spring Data JPA? Я не хочу использовать аннотацию @Query. Эквивалентный запрос sql будет таким:

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

Я попытался написать следующий запрос, но он не работает:

int countDistinctRackById();

person Benimo    schedule 04.06.2018    source источник


Ответы (3)


Это должно работать:

Integer countDistinctRackById(Long id);
person Ilias Mentz    schedule 04.06.2018
comment
Я только что протестировал этот подход, и он не сработал (Spring Boot 2.2.2). Пожалуйста, предоставьте больше информации - person RomanMitasov; 03.06.2020
comment
Вы можете предоставить больше информации? класс сущности, метод репозитория и т. д.? - person Ilias Mentz; 03.06.2020
comment
Конечно. Мое репо простирается от JpaRepository, класс сущности имеет поле customerId и поле decision, и мне нужно получить определенное количество клиентов, для которых код decision является одним из необходимых значений. Я дал методу имя countDistinctCustomerIdByDecisionIn, но сгенерированный SQL был не select count(distinct CUSTOMER_ID) ..., а select distinct count(distinct ID) ... - person RomanMitasov; 03.06.2020
comment
не уверен, поможет ли это, но это похоже на проблему с ключевым словом In. снова мне нужно больше информации, чтобы помочь (тип возвращаемого значения метода, тип поля сущности и т. д.) - person Ilias Mentz; 09.06.2020
comment
Этот метод на самом деле не производит отдельного подсчета выбранного поля. он возвращает определенное количество первичных ключей и полностью игнорирует часть имени поля. - person The Shoe Shiner; 30.01.2021

Попробуйте это в соответствии с Весенняя документация:

Integer countDistinctRackById(String id);

Замените слово Rack на фактическое имя поля стойки.

person Afridi    schedule 04.06.2018

Я только что попробовал это, и ни один из существующих ответов не работает.

Следующий запрос:

Integer countDistinctRackById(String id);

Будет отображать что-то вроде этого:

select distinct count(table0_.rack) as col_0_0_ from table table0_ where table0_.id=?

Поскольку в настоящее время я застрял в Spring Boot 1.2.3, не знаю, были ли какие-либо изменения позже, но для достижения определенного счета мне пришлось определить собственный запрос:

@Query("Select count(distinct rack) from Table t where t.id = ?1")

person avolkmann    schedule 09.10.2018