Я использую 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;
<groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.2.Final</version>
прежде всего проверьте, поддерживает ли ваша база данных такой запрос (выберите * из information_schema.sequences). если это не так, конфигурация HB выбрала неправильный диалект.
Redshift не поддерживает такой запрос (выберите * из information_schema.sequences). Ошибка [Amazon](500310) Неверная операция: отношение "information_schema.sequences" не существует;
Выбранный Hibernate диалект: org.hibernate.dialect.Dialect: HHH000400: Using диалект: org.hibernate.dialect.PostgreSQL81Dialect
@VinayLimbare Удалось ли вам найти решение этой проблемы?




Я создал собственный диалект, который заменяет существующий 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");
спящий режим вы используете?