繁体   English   中英

Spring Boot / Spring数据import.sql不运行Spring-Boot-1.0.0.RC1

[英]Spring Boot / Spring Data import.sql doesn't run Spring-Boot-1.0.0.RC1

我一直在关注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>

我还必须将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上运行

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

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

我想您可以删除JpaVendorAdapter以及LocalContainerEntityManagerFactoryBean (除非您使用的是persistence.xml )并让Boot获得控制权。 可以使用@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 ”,它有效。 可能会给这一点。 我的代码可以在这里找到 - https://github.com/sidnan/spring-batch-example

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

就像之前所说的那样,将它与属性ddl-auto = create-drop一起使用,这样它就不会在尝试插入现有数据时崩溃。

您还可以使用spring.datasource.data属性设置要执行的特定文件。 在这里查看更多信息: http//docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

注意:之前提到的schema.sql将包含整个数据库定义。 如果要使用它,请确保Hibernate不会尝试根据项目中的Java实体为您构建数据库。 这就是de doc所说的:

如果你想在JPA应用程序(使用Hibernate)中使用schema.sql初始化,那么如果Hibernate尝试创建相同的表,ddl-auto = create-drop将导致错误。 为了避免这些错误,请将ddl-auto明确设置为“”(首选)或“无”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM