Ошибка типа преобразования с собственным запросом JPA

#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();
}