簡體   English   中英

Java Hibernate,Liquibase是否支持跨數據庫和SQLite?

[英]Java Hibernate, Liquibase supports cross databases and SQLite?

我將Spring Boot 1.5.2與Hibernate 5結合使用,並嘗試支持盡可能多的數據庫(即:Hibernate將在SQLite 3中創建所有表,然后將Liquibase用作抽象層來生成XML更改日志文件。對於Liquibase聲稱的所有受支持的數據庫: 支持的數據庫 )。

所以我在pom.xml(Maven)中添加了對Liquibase的依賴。

    <!-- Database schema versions migration -->


    <dependency>
        <groupId>org.liquibase</groupId>
         <artifactId>liquibase-core</artifactId>
          <version>3.5.3</version>
    </dependency>
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-maven-plugin</artifactId>
        <version>3.4.1</version>
    </dependency>

和一個插件,用於從創建的Hibernate數據庫中生成changelog XML文件

<!-- Database schema versions migration -->  

 <plugin>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-maven-plugin</artifactId>
        <version>3.5.3</version>
        <configuration>                  
            <propertyFile>src/main/resources/liquibase.properties</propertyFile>
        </configuration>                
 </plugin> 

我在liquibase.properties中進行了一些配置以連接到SQLite3 datab文件,然后可以運行此命令來創建一個changelog文件。

mvn liquibase:generateChangeLog

由於addPrimaryKey元素,我無法在另一個不同的SQLite 3 db文件中重新創建輸出更改日志:

<changeSet author="rasdaman (generated)" id="1497363976895-86">
     <addPrimaryKey columnNames="address_id" tableName="address"/>
</changeSet>

以及Java Spring Boot啟動時的錯誤:

addPrimaryKey is not supported on sqlite, 
classpath:/database_versions/db.changelog-master.xml::1497366115846-62::rasdaman (generated)

    at liquibase.changelog.DatabaseChangeLog.validate(DatabaseChangeLog.java:266)
    at liquibase.Liquibase.update(Liquibase.java:210)
    at liquibase.Liquibase.update(Liquibase.java:192)
    at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:431)
    at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:388)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)

如果我使用Liquibase從SQLite生成的輸出文件,並允許Spring Boot以Postgresql數據源啟動,則會出現另一個錯誤:

org.springframework.beans.factory.BeanCreationException: Error creating 
bean with name 'liquibase' defined in class path resource     


[org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.MigrationFailedException: Migration failed for change set classpath:/database_versions/db.changelog-master.xml::1497366115846-1:: (generated):
         Reason: liquibase.exception.DatabaseException: ERROR: syntax error at or near "("
      Position: 72 [Failed SQL: CREATE TABLE public."HT_abstract_coverage" (abstract_coverage_id BIGINT(2000000000, 10) NOT NULL, hib_sess_id CHAR(36))]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)

因此,似乎沒有其他工具可以自動生成可以自動導入任何常見數據庫的XML之類的抽象數據文件? 如果您有任何建議,請指教!

謝謝,

問題是Liquibase不能很好地支持SQLite http://www.liquibase.org/documentation/changes/add_primary_key.html ,還有Hibernate,它需要第三方SQLite方言並且寫性能不好,所以我認為Liquibase可以很好地與其他數據庫配合使用,例如:postgresql,mysql,hyperSQL,...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM