我一直在关注Spring Boot的开发,并且在0.0.5-BUILD- SNAPSHOT我正在使用的初始版本和当前版本之间的某个1.0.0.RC1时间,我不再运行import.sql脚本。
0.0.5-BUILD- SNAPSHOT
1.0.0.RC1
import.sql
这里是我的配置LocalContainerEntityManager和JpaVendorAdapter
LocalContainerEntityManager
JpaVendorAdapter
@Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory( DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) { LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); lef.setDataSource(dataSource); lef.setJpaVendorAdapter(jpaVendorAdapter); lef.setPackagesToScan("foo.*"); return lef; } @Bean public JpaVendorAdapter jpaVendorAdapter() { HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter(); hibernateJpaVendorAdapter.setShowSql(true); hibernateJpaVendorAdapter.setGenerateDdl(true); hibernateJpaVendorAdapter.setDatabase(Database.POSTGRESQL); return hibernateJpaVendorAdapter; }
有趣的hibernate.hbm2ddl.auto似乎还在运行,我认为这是我的定义的一部分SpringBootServletInitializer
hibernate.hbm2ddl.auto
SpringBootServletInitializer
@Configuration @ComponentScan @EnableAutoConfiguration public class Application extends SpringBootServletInitializer {
但是,我还注意到生成的表不再具有 下划线 并在生成时更改了形状?
但是,这可能是org.postgresql像这样更新我的版本的结果:
org.postgresql
先前:
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.2-1004-jdbc41</version> </dependency>
现在:
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.3-1100-jdbc41</version> </dependency>
我还必须更改pggetserialsequence为pg_get_serial_sequence使脚本完全从pgadmin?运行。
pggetserialsequence
pg_get_serial_sequence
pgadmin
我想我正在困惑正在发生的事情,但是最重要的是我想重新开始import.sql跑步。
我一直在关注示例项目:https : //github.com/spring-projects/spring-boot/tree/master/spring-boot- samples/spring-boot-sample-data-jpa
他们import.sql也没有继续1.0.0-BUILD-SNAPSHOT
1.0.0-BUILD-SNAPSHOT
该import.sql脚本是我认为的Hibernate功能(不是Spring或Spring Boot)。它必须在示例中运行,否则测试将失败,但是在任何情况下,只有将ddl-auto设置为创建表时,它才运行。使用Spring Boot时,应确保将spring.jpa.hibernate.ddl-auto其设置为“ create”或“ create- drop”(后者是嵌入式数据库在Boot中的默认设置,但对于其他数据库(例如postgres)则不是默认设置)。
spring.jpa.hibernate.ddl-auto
如果你要无条件地运行SQL脚本,默认情况下,spring启动会,如果你把它在运行的hibernate设置一个独立的classpath:schema.sql(或classpath:schema-<platform>.sql地方<platform>是你的情况“的Postgres”)。
classpath:schema.sql
classpath:schema-<platform>.sql
<platform>
我认为您可能可以删除JpaVendorAdapter和LocalContainerEntityManagerFactoryBean(除非您正在使用persistence.xml),然后让Boot进行控制。可以使用@EntityScan注释设置要扫描的软件包(Spring Boot中的新增功能)。
LocalContainerEntityManagerFactoryBean
persistence.xml
@EntityScan
在Boot 1.0.0.RC1中更改了默认的表命名方案(因此与postgres依赖无关)。我不确定RC2是否会一直如此,但是无论如何,您可以通过设置来回到旧的Hibernate默认值spring.jpa.hibernate.naming- strategy=org.hibernate.cfg.ImprovedNamingStrategy。
spring.jpa.hibernate.naming- strategy=org.hibernate.cfg.ImprovedNamingStrategy