一尘不染

Spring Boot / Spring Data import.sql无法运行Spring-Boot-1.0.0.RC1

spring-boot

我一直在关注Spring Boot的开发,并且在0.0.5-BUILD- SNAPSHOT我正在使用的初始版本和当前版本之间的某个1.0.0.RC1时间,我不再运行import.sql脚本。

这里是我的配置LocalContainerEntityManagerJpaVendorAdapter

@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

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {

但是,我还注意到生成的表不再具有 下划线 并在生成时更改了形状?

但是,这可能是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>

我还必须更改pggetserialsequencepg_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


阅读 474

收藏
2020-05-30

共1个答案

一尘不染

import.sql脚本是我认为的Hibernate功能(不是Spring或Spring
Boot)。它必须在示例中运行,否则测试将失败,但是在任何情况下,只有将ddl-auto设置为创建表时,它才运行。使用Spring
Boot时,应确保将spring.jpa.hibernate.ddl-auto其设置为“ create”或“ create-
drop”(后者是嵌入式数据库在Boot中的默认设置,但对于其他数据库(例如postgres)则不是默认设置)。

如果你要无条件地运行SQL脚本,默认情况下,spring启动会,如果你把它在运行的hibernate设置一个独立的classpath:schema.sql(或classpath:schema-<platform>.sql地方<platform>是你的情况“的Postgres”)。

我认为您可能可以删除JpaVendorAdapterLocalContainerEntityManagerFactoryBean(除非您正在使用persistence.xml),然后让Boot进行控制。可以使用@EntityScan注释设置要扫描的软件包(Spring
Boot中的新增功能)。

在Boot
1.0.0.RC1中更改了默认的表命名方案(因此与postgres依赖无关)。我不确定RC2是否会一直如此,但是无论如何,您可以通过设置来回到旧的Hibernate默认值spring.jpa.hibernate.naming- strategy=org.hibernate.cfg.ImprovedNamingStrategy

2020-05-30