Hibernate, получая исключение отображения для uuid - PullRequest
0 голосов
/ 24 июня 2018

У меня есть простой основной класс без объектов-сущностей, простой SQL, требующий UUID в качестве вывода. Я получаю исключение сопоставления, чтобы обойти исключение сопоставления, я создал свой собственный диалект, даже тогда исключение сопоставления все еще существует.

Версия Hibernate очень старая, 3.2.6, и я не могу выполнить обновление из-за нескольких ограничений. Дайте мне знать, если я все еще могу обойти.

Моя функция выглядит так:

SQLQuery getGidQuery = session.createSQLQuery("SELECT gid FROM table WHERE id = " + result.getId());
UUID gid = UUID.fromString(getGidQuery.uniqueResult().toString());

Я получаю следующее исключение

Exception in thread "main" org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
at org.hibernate.dialect.TypeNames.get(TypeNames.java:56)
at org.hibernate.dialect.TypeNames.get(TypeNames.java:81)
at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:370)
at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:559)
at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:485)
at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:501)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1796)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2213)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:811)
at Main.main(Main.java:44)

Чтобы избежать вышеупомянутого исключения, я создал свой собственный класс диалекта, расширяющий PostgresDialect, который включает в себя диалект UUID, но исключение все еще выбрасывается.

public class PostgresUuidDialect extends PostgreSQLDialect {

public PostgresUuidDialect() {
    super();
    registerColumnType(java.sql.Types.OTHER, "pg-uuid");
}


}

Создание моей конфигурации

private static Configuration getDatabaseConfiguration(CommandLine commandLine, String database) {
    Configuration configuration = new AnnotationConfiguration();
    configuration.setProperty("hibernate.connection.username", commandLine.getOptionValue('u'));
    configuration.setProperty("hibernate.connection.password", commandLine.getOptionValue('p'));
    configuration.setProperty("hibernate.connection.url",
            "jdbc:postgresql://" + commandLine.getOptionValue('h') + ":" + commandLine.getOptionValue("o")
                    + "/" + database + "?searchpath=" + database);
    configuration.setProperty("hibernate.dialect", "<package>.PostgresUuidDialect");
    return configuration;
}

1 Ответ

0 голосов
/ 25 июня 2018

Попробуйте выполнить следующее:

.addScalar("ID", StringType.INSTANCE)

(используйте правильный тип, не обязательно StringType)

RegisterHibernateType( ... )

в вашем конструкторе

источник

...