我将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”不存在;
答案 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");