Как пропустить создание «information_schema.sequences» при использовании Hibernate в проектах Java

Я использую Redshift в качестве базы данных для своего Java-проекта с поддержкой Hibernate. Когда Hibernate запускается, он пытается создать последовательность, которая мне не нужна.

public class HibernateUtil {

    private static SessionFactory SESSION_FACTORY;
    private static StandardServiceRegistry registry;

    public static synchronized SessionFactory getSessionFactory(DataSource dataSource) {
        if (SESSION_FACTORY == null) {
            try {
                Configuration configuration = new Configuration();

                Properties settings = new Properties();
                settings.put("show_sql", "false");
                settings.put("current_session_context_class", "thread");
                settings.put("hbm2ddl.auto", "none");
                configuration.setProperties(settings);

                registry = new StandardServiceRegistryBuilder()
                        .applySettings(configuration.getProperties())
                        .applySetting(Environment.DATASOURCE, dataSource)
                        .build();

                SESSION_FACTORY = configuration.buildSessionFactory(registry);
            } catch (Exception e) {
                log.error("Error creating Session Factory.", e);
                if (registry != null) {
                    StandardServiceRegistryBuilder.destroy(registry);
                }
            }
        }
        return SESSION_FACTORY; }
}

Это трассировка стека.

ERROR [2019-06-07 14:41:40,743] org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl: Could not fetch the SequenceInformation from the database
! com.amazon.support.exceptions.ErrorException: [Amazon](500310) Invalid operation: relation "information_schema.sequences" does not exist;
! ... 52 common frames omitted
! Causing: java.sql.SQLException: [Amazon](500310) Invalid operation: relation "information_schema.sequences" does not exist;

спящий режим вы используете?

hunter 07.06.2019 19:02

<groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.2.Final</version>

Vinay Limbare 07.06.2019 19:09

прежде всего проверьте, поддерживает ли ваша база данных такой запрос (выберите * из information_schema.sequences). если это не так, конфигурация HB выбрала неправильный диалект.

hunter 07.06.2019 19:18

Redshift не поддерживает такой запрос (выберите * из information_schema.sequences). Ошибка [Amazon](500310) Неверная операция: отношение "information_schema.sequences" не существует;

Vinay Limbare 07.06.2019 19:46

Выбранный Hibernate диалект: org.hibernate.dialect.Dialect: HHH000400: Using диалект: org.hibernate.dialect.PostgreSQL81Dialect

Vinay Limbare 07.06.2019 19:47

@VinayLimbare Удалось ли вам найти решение этой проблемы?

Safeer Ansari 14.12.2019 16:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
1 547
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я создал собственный диалект, который заменяет существующий PostgreSqlDialect.

    public class CustomRedshiftDialect extends PostgreSQL81Dialect {

    @Override
    public String getQuerySequencesString() {
        return null;
    }
}

И в классе HibernateUtil или соответствующем XML.

        // Hibernate settings equivalent to hibernate.cfg.xml's properties
    Properties settings = new Properties();
    settings.put("show_sql", "false");
    settings.put("current_session_context_class", "thread");
    settings.put("hbm2ddl.auto", "none");
    settings.put("hibernate.dialect", "com.me.vlimbare.factory.db.CustomRedshiftDialect");

Другие вопросы по теме