问题描述
这是我的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");
NOT A VALID sql STATEMENT;
应用程序的h2
版本在启动时引发错误,但是postgresql
版本的应用程序启动时没有错误,并且由于数据库未正确初始化而在运行时发生了故障。
注意:该代码库是演示此问题的完整示例:https://github.com/fctorial/crud
解决方法
也许这个答案可以帮助您hibernate.hbm2ddl.import_files: Path to the files
仅在创建架构时使用文件