在Java项目中使用Hibernate时如何跳过“ information_schema.sequences”创建过程

时间:2019-06-07 16:31:49

标签: java hibernate amazon-redshift

我将Redshift用作支持Hibernate的Java项目的数据库。当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; }
}

这是堆栈跟踪。

错误[2019-06-07 14:41:40,743] org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl:无法从数据库中获取SequenceInformation ! com.amazon.support.exceptions.ErrorException:Amazon无效操作:关系“ information_schema.sequences”不存在; ! ...省略了52个通用框架 !原因:java.sql.SQLException:Amazon无效操作:关系“ information_schema.sequences”不存在;

1 个答案:

答案 0 :(得分:0)

我创建了一个自定义方言,它将覆盖现有的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.tracelink.analytics.dlreporting.db.CustomRedshiftDialect");