当前位置: 首页 > 知识库问答 >
问题:

Liquibase忽略Oracle DB的AutoIncrement=“true”

向苗宣
2023-03-14
 create table cat_component.organisation (
   id number(19,0) generated as identity,
    archived number(1,0),
    is_in_avaloq_group number(1,0) not null,
    mdm_uuid varchar2(255 char),
    name varchar2(255 char),
    primary key (id)
)
 <changeSet author="blabla (generated)" id="1582733383680-5">
    <createTable tableName="organisation">
        <column autoIncrement="true" name="id" type="NUMBER(19, 0)">
            <constraints primaryKey="true" primaryKeyName="organisationPK"/>
        </column>
        <column name="archived" type="NUMBER(1, 0)"/>
        <column name="is_in_avaloq_group" type="NUMBER(1, 0)">
            <constraints nullable="false"/>
        </column>
        <column name="mdm_uuid" type="VARCHAR2(255 CHAR)"/>
        <column name="name" type="VARCHAR2(255 CHAR)"/>
    </createTable>
</changeSet>
2020-02-26 16:15:10.779  INFO 8064 --- [main] liquibase.executor.jvm.JdbcExecutor      : CREATE TABLE CAT_COMPONENT.organisation (id NUMBER(19, 0) NOT NULL, archived NUMBER(1, 0), is_in_avaloq_group NUMBER(1, 0) NOT NULL, mdm_uuid VARCHAR2(255 CHAR), name VARCHAR2(255 CHAR), CONSTRAINT organisationPK PRIMARY KEY (id))

您可能已经注意到,缺少了“生成为标识”,这使我相信不管出于什么原因,AutoIncrement=“true”被忽略了。

我使用Oracle 12.1.0.2和org.LiquiBase:LiquiBase-Core 3.8.2。OJDBC驱动程序版本为19.3.0.0。分级属性为:

spring.datasource.url=jdbc:oracle:thin:@//host:1522/SID
spring.datasource.driverClassName=oracle.jdbc.OracleDriver
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.datasource.username=user
spring.datasource.password=pass
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.jpa.show-sql=true

logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type=trace

spring.datasource.continue-on-error=true
spring.datasource.platform=oracle

spring.liquibase.url=${spring.datasource.url}
spring.liquibase.user=${spring.datasource.username}
spring.liquibase.password=${spring.datasource.password}
spring.liquibase.url=${spring.datasource.url}
spring.liquibase.user=${spring.datasource.username}
spring.liquibase.password=${spring.datasource.password}
spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.xml
spring.liquibase.default-schema=${spring.jpa.properties.hibernate.default_schema}
spring.liquibase.liquibase-schema=${spring.jpa.properties.hibernate.default_schema}

我读过互联网,我知道我的Oracle版本与此列类型兼容,并且我不需要创建额外的Oracle序列。有什么线索会出什么问题吗?

共有1个答案

郎嘉树
2023-03-14

似乎是LiquiBase中的一个bug。我刚刚在这里找到了它https://liquibase.jira.com/projects/core/issues/core-3524?filter=allissues&orderby=updated%20desc&keyword=Oracle

正如它所说的,有一个解决办法,就是添加

 generationType="BY DEFAULT"

在每个列定义处,其中使用了autoincrement=“true”。

 类似资料:
  • 我在一些字段上有@NotNull注释。然而,当我尝试生成diffChangelog时,它会删除所有非空约束 示例类: 差异集: 唯一的解决方案似乎是在每个字段上添加一个额外的注释@列(nullable=false)。我可以做任何事情,这样我就不必在每个字段上添加额外的注释。

  • 我在酗酒方面遇到了麻烦。出于某种原因(我没有更改任何现有的变更集或其他东西),它试图应用已经在base中的变更集。所以我得到了一些错误,比如“关系”表“已经存在”。 我找到了这个标签-

  • 我试图从现有数据库(MySQL)中使用liquibase(3.5.5)。 > C: /液化酶-3.5.5/liquibase。bat—驱动程序=com。mysql。jdbc。驱动程序^--classpath=C:/Libraries/mysql-connector-java-5.1.37-bin。jar^--changeLogFile=db。变更日志。xml^--url=“jdbc:mysql:/

  • 我正在使用liquibase运行一个changelog文件来部署几个数据库对象。如果在变更日志中找不到特定文件,则会出现文件未找到错误并停止执行。我想忽略未找到的文件,而不是引发错误。我查看了文档,但没有找到任何适用于我的用例的内容。有线索吗? 提前感谢。

  • 然后使用这个changelog文件执行liquibase,它驻留在目录/home/changelogs中。则应用更改。然后使用相同的changelog文件再次运行liquibase。正如预期的那样,这次不应用更改。 但如果我将更改日志文件移动到/home/changelog/migration并再次运行liquibase,则应用更改。 liquibase似乎将changelog的路径包含在deci

  • Liquibase版本:3.3.2 DB平台:SQL服务器2014 驱动程序:jdbc 4.0 我使用GenerateChangeLog命令从我的数据库生成一组新的部署脚本。许多表都没有NULL列,但当我测试Liquibase部署(更新)列时,它们都可以为空。这导致PK创建失败。 样本更改集: 有什么建议吗?