首页 > 解决方案 > 如果我将数据源从 `H2` 切换到 `postgresql`,`hibernate.hbm2ddl.import_files` 属性将停止工作

问题描述

这是我的 Spring Boot 应用程序的配置:

@Configuration
@EnableJpaAuditing
public class Cfg {

    @Bean(destroyMethod = "close")
    public DataSource myDataSource() {
        org.apache.tomcat.jdbc.pool.DataSource o = new org.apache.tomcat.jdbc.pool.DataSource();
        o.setDriverClassName("org.h2.Driver");
        o.setUrl("jdbc:h2:mem:test");
        return o;
    }

    @Bean("entityManagerFactory")
    public LocalSessionFactoryBean sessionFactory(DataSource myDataSource) {
        LocalSessionFactoryBean o = new LocalSessionFactoryBean();
        o.setDataSource(myDataSource);
        o.setPackagesToScan("fctorial.crossover.entities");
        Properties props = new Properties();
        props.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.format_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "none");
        props.setProperty("hibernate.hbm2ddl.import_files", "classpath:/schema.sql,classpath:/data.sql");
        o.setHibernateProperties(props);
        return o;
    }
}

它按预期工作,但由于某种原因,如果我将数据库更改为 postgresql(通过以下补丁),import_files则不再执行。

@@ -17,8 +17,10 @@
     @Bean(destroyMethod = "close")
     public DataSource myDataSource() {
         org.apache.tomcat.jdbc.pool.DataSource o = new org.apache.tomcat.jdbc.pool.DataSource();
-        o.setDriverClassName("org.h2.Driver");
-        o.setUrl("jdbc:h2:mem:test");
+        o.setDriverClassName("org.postgresql.Driver");
+        o.setUsername("saga");
+        o.setPassword("");
+        o.setUrl("jdbc:postgresql://localhost:5432/postgres");
         return o;
     }
 
@@ -28,7 +30,7 @@
         o.setDataSource(myDataSource);
         o.setPackagesToScan("fctorial.crossover.entities");
         Properties props = new Properties();
-        props.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
+        props.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
         props.setProperty("hibernate.show_sql", "true");
         props.setProperty("hibernate.format_sql", "true");
         props.setProperty("hibernate.hbm2ddl.auto", "none");

我在顶部有这个schema.sql

NOT A VALID SQL STATEMENT;

应用程序版本在h2启动时抛出错误,但postgresql版本在启动时没有错误,并且在运行时出现故障,因为数据库未正确初始化。

注意:此代码库是演示此问题的完整示例:https ://github.com/fctorial/crud

标签: javaspringpostgresqlhibernateh2

解决方案


也许这个答案可以帮助你hibernate.hbm2ddl.import_files: Path to the files

这些文件仅在创建模式时使用


推荐阅读