簡體   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