Как установить сопоставления JDBC в проекте весенней загрузки JPA? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть таблица t1 postgres, в которой есть типы столбцов, такие как uuid и отметка времени с зоной и т. Д., Которые вызывают

org.springframework.orm.jpa.JpaSystemException: No Dialect mapping for JDBC type: 1111; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111

Если я попытаюсь получить d столбцов типа int или varchar, мойкод работает нормально, но когда я пытаюсь включить столбцы с типом данных uuid или типом даты, происходит сбой с вышеуказанным исключением.

Так что у меня есть класс интерфейса репозитория, который расширяет мой интерфейс CustomRepository, который снова реализуетсядругим классом для реализации моих пользовательских запросов, как показано ниже:

@Repository
interface Repo extends JpaRepository<Entity, UUID>, CustomRepo {
    // some repo methods
}

interface CustomRepo {
    List queryBy(Type1 par1, Type2 par2);
}

@Service
class CustomRepoImpl implements CustomRepo {
    @PersistenceContext
    private EntityManager entityManager;

    public List queryBy(Type1 par1, Type2 par2) {
        query_string = "SOME QUERY STRING WITH JOINS";
        Query query = entityManager.createNativeQuery(query_string);
        List<Object[]> resultList = (List<Object[]>) query.getResultList(); // giving No Dialect mapping for JDBC type: 1111
        return resultList;
    }
}

Поэтому, когда моя строка запроса выбирает столбцы типа int или varchar, я не сталкиваюсь с какими-либо проблемами, но когда я пытаюсь выбрать столбцы, которыеЯ имею в виду вышеупомянутое исключение, вероятно, потому что он не мог найти соответствующие сопоставления Java для них.

Как мне избежать этого?В любом случае я могу явно добавить сопоставления для запроса, чтобы подобрать для этих типов столбцов?

Ответы [ 2 ]

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

Итак, я получаю эти ошибки, потому что некоторые столбцы, которые я выбрал, имели тип uuid в postgres.Я предполагаю, что они не могут быть сопоставлены с соответствующим типом данных, например, как varchar отображается в строку.Поэтому я изменил свой SQL-запрос, чтобы привести столбец к varchar.Например, скажем, мой столбец c1 в таблице t1 имел тип uuid, затем я делаю это в своем запросе sql:

SELECT CAST(t1.c1 AS VARCHAR) .....REST_OF_THE_QUERY

Итак, это приведет к тому, что значения моего столбца будут возвращены как varchar, которые затем обрабатываются как строки.

Не уверен, есть ли альтернатива, но это лучшее, что я мог придумать.Если кто-нибудь знает какой-либо лучший подход, они могут поделиться здесь.

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

Согласно сообщению об ошибке тип столбца uuid не может быть сопоставлен с типом базы данных с помощью hibernate.Это может быть тип java.util.UUID.

Так что просто примените аннотацию @Type(type="uuid-char") для вашего типа UUID.

Также вы можете проверить ЗДЕСЬ требуемый тип дляВы поля в Hibernate и можете использовать соответственно.

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