Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Boot/Spring Data import.sql不';t运行Spring-Boot-1.0.0.RC1_Spring_Spring Data_Spring Boot - Fatal编程技术网

Spring Boot/Spring Data import.sql不';t运行Spring-Boot-1.0.0.RC1

Spring Boot/Spring Data import.sql不';t运行Spring-Boot-1.0.0.RC1,spring,spring-data,spring-boot,Spring,Spring Data,Spring Boot,我一直在关注Spring Boot的开发,在初始版本0.0.5-BUILD-SNAPSHOT和当前版本1.0.0.RC1之间的某个时间,我不再运行我的import.sql脚本 这是我对LocalContainerEntityManager和JpaVendorAdapter @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory( DataSource dataSource,

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

这是我对
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定义的一部分

@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>

org.postgresql


他们的
import.sql
也没有在
1.0.0-BUILD-SNAPSHOT

上运行
import.sql
脚本是一个休眠特性,我认为(不是Spring或Spring引导)。它必须在示例中运行,否则测试将失败,但在任何情况下,它仅在设置ddl auto以创建表时运行。使用Spring引导时,您应该确保
Spring.jpa.hibernate.ddl auto
设置为“创建”或“创建删除”(后者是嵌入式数据库引导时的默认值,但不适用于其他数据库,例如postgres)

如果您希望无条件地运行SQL脚本,默认情况下,如果您将它放在
classpath:schema.SQL
(或者
classpath:schema-.SQL
中,其中
在您的情况下是“postgres”),Spring Boot将运行一个独立于Hibernate设置的脚本

我认为您可能可以删除
JpaVendorAdapter
LocalContainerEntityManagerFactoryBean
(除非您使用的是
persistence.xml
)并让引导控制。可以使用
@EntityScan
注释设置要扫描的包(Spring Boot中新增)


默认的表命名方案在Boot 1.0.0.RC1中更改(因此与postgres依赖项无关)。我不确定RC2中是否仍然会出现这种情况,但无论如何,您可以通过设置
spring.jpa.Hibernate.naming strategy=org.Hibernate.cfg.ImprovedNamingStrategy

返回到旧的Hibernate默认设置。嘿,我遇到了类似的问题。我的sql脚本最初没有被调用。然后,我尝试将文件从“import.sql”重命名为“schema.sql”,结果成功了。也许可以试一试。我的代码可以在这里找到-

除了前面所说的,值得注意的是,您可以使用data.sql文件将数据导入/初始化到表中。只需将data.sql放在类路径的根目录中(例如:如果您正在运行Spring Boot应用程序,则将其放在src/main/resources路径中)

如前所述,将其与属性ddl auto=create drop一起使用,这样它在插入现有数据时不会崩溃

您还可以使用spring.datasource.data属性设置要执行的特定文件。请在此处查看更多信息:

注意:前面提到的schema.sql将包含整个DB定义。如果您想使用它,请确保Hibernate不会试图基于项目中的Java实体为您构建DB。de doc是这么说的:

如果要在JPA应用程序中使用schema.sql初始化(使用 Hibernate)则ddl auto=create drop在休眠时将导致错误 尝试创建相同的表。要避免这些错误,请设置ddl auto 明确指定为“”(优选)或“无”


谢谢戴夫,我看到你对这个项目的贡献了!我真的很感谢你抽出时间向我指出这一点。。。。如果
spring.jpa.hibernate.ddl auto=update
,那么
import.sql
将不会运行。
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.3-1100-jdbc41</version>
</dependency>