#spring #spring-data-jpa
#spring #spring-data-jpa
Вопрос:
Я написал собственный запрос, чтобы получить 5 лучших тегов для вопросов, я создал класс для хранения возвращаемых данных — это только имя тега и общее количество вхождений, но я получаю ошибку преобразования типа, которую я не понимаю.
@Query(value = "select distinct t.naam as name, count(t.id) as total from vragen_tags vt "
"left join tags t on vt.tag_id = t.id "
"left join vragen v on vt.vraag_id = v.id "
"where v.actief = true "
"group by t.naam "
"order by total desc "
"limit ?1", nativeQuery = true)
Set<TagAndCountResponse> getTopTags(int limit);
Класс:
public class TagAndCountResponse {
private String name;
private int total;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
}
Но я получаю эту ошибку:
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type [be.ambrassade.jeugdlink.model.response.TagAndCountResponse]
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:321) ~[spring-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:194) ~[spring-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:174) ~[spring-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
...
Что вызывает эту ошибку?
Ответ №1:
Я нашел ответ с помощью другого носителя. (слава файлам) Решение заключается в использовании прогнозов (https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections), поэтому в моем случае перезапись конкретного класса для этого интерфейса заставляет его работать.
public interface TagAndCountResponse {
String getName();
int getTotal();
}