Ошибка «Не найден конвертер, способный конвертировать из типа XXX» при использовании @Query («Выбрать * из») - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть класс DocumentData:

@Data //Lombok
public class DocumentData {

    private Long documentId;
    private Long binderId;
    private String containerCode;
    private String barcode;
    private Long clientId;

}

У меня есть мой репозиторий:

public interface DocumentArchiveRepository extends JpaRepository<DocumentArchive, Long> {

    String QUERY_GET_DOCUMENT_DATA = "SELECT DISTINCT d.id_document, pd.id_binder, s.container_code, d.barcode, k.id_client FROM table1 pd \n"
            + "JOIN table2 d ON pd.id_document = d.id_cokument\n"
            + "JOIN table3 s ON s.id = pd.id_binder \n"
            + "JOIN table4 k ON k.id_document = d.id_document\n"
            + "WHERE pd.id_position = 10122 AND d.id_document in :documentIds";

    @Query(value = QUERY_GET_DOCUMENT_DATA, nativeQuery = true)
    List<DocumentData> getDocumentData(@Param("documentIds") List<Long> documentIds);

Когда я хочу получить данные:

List<DocumentData> documentData = repository.getDocumentData(documentIds);

Я получаю следующую ошибку:

org.springframework.core.convert.ConverterNotFoundException: не найден конвертер, способный к преобразованию из типа [org.springframework.data.jpa.repository.query.AbstractJpaQuery $ TupleConverter $TupleBackedMap], чтобы ввести [pl.ultimo.retention.archive.dto.DocumentData] в org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound (GenericConversionService.java:321) ~ [springEL core-5.1. 4.4.jar: 5.1.4.RELEASE] в org.springframework.core.convert.support.GenericConversionService.convert (GenericConversionService.java:194) ~ [spring-core-5.1.4.RELEASE.jar: 5.1.4.RELEASE] вorg.springframework.core.convert.support.GenericConversionService.convert (GenericConversionService.java:174) ~ [spring-core-5.1.4.RELEASE.jar: 5.1.4.RELEASE]

СледуетЯ изменяю свой код на List<Object> или сопоставить результаты с DocumentData?Или, может быть, есть лучшее решение?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

В конце концов, я не нашел правильного решения для моего случая со многими объединениями без субъектов.Я должен создать все необходимые объекты, только с необходимыми полями, а затем использовать их имена в моем запросе (используя Select new MyPOJOClass (...))

0 голосов
/ 19 февраля 2019

Вам нужно будет обернуть запрос в конструкторе:

String QUERY_GET_DOCUMENT_DATA = "SELECT new " + DocumentData.class.getName() + "(d.id_document, pd.id_binder, s.container_code, d.barcode, k.id_client) FROM table1 pd "
        + "JOIN table2 d ON pd.id_document = d.id_cokument "
        + "JOIN table3 s ON s.id = pd.id_binder "
        + "JOIN table4 k ON k.id_document = d.id_document "
        + "WHERE pd.id_position = 10122 AND d.id_document in :documentIds";

Обратите внимание на фигурные скобки.Также я использую DocumentData.class.getName(), но просто использование имени "DocumentData" работает, если оно уникально в classpath.Я не уверен, может ли это быть выполнено как собственный запрос, попробуйте его, если нет - запустите как jpql.

Другим решением будет определение пользовательской реализации Converter и аннотирование wuery с помощью @Converter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...