You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决JHipster7对接SQL Server Express时的Liquibase报错问题

问题1:Liquibase执行报错 Table 'jhi_user' does not have the identity property. Cannot perform SET operation

原因

JHipster默认主键生成策略采用序列(对应changelog开头的sequence_generator),未给jhi_user表的id列添加自增(IDENTITY)属性,但changelog中针对mssql数据库额外添加了SET IDENTITY_INSERT语句,该语句仅针对带IDENTITY属性的表生效,二者逻辑冲突导致报错。

解决方案(二选一即可)

  • 方案1:保留序列生成主键策略
    直接删除changelog中以下两段SQL语句即可,序列模式支持手动插入指定ID值,无需开启IDENTITY_INSERT:
    <sql dbms="mssql">
        SET IDENTITY_INSERT jhi_user ON;
    </sql>
    
    <sql dbms="mssql">
        SET IDENTITY_INSERT jhi_user OFF;
    </sql>
    
  • 方案2:改用SQL Server自增列生成主键
    1. 修改jhi_user表的id列定义,添加autoIncrement="true"属性:
    <column name="id" type="bigint" autoIncrement="true">
        <constraints primaryKey="true" nullable="false"/>
    </column>
    
    1. 删除changelog开头的序列创建语句:
    <changeSet id="00000000000000" author="jhipster">
        <createSequence sequenceName="sequence_generator" startValue="1050" incrementBy="50"/>
    </changeSet>
    

注意:修改changelog后需清空数据库中已生成的databasechangelog表记录,或重建数据库,避免之前执行失败的变更记录影响后续执行。


问题2:执行liquibaseDiff任务报错 The option --referenceUrl is required

原因

  1. diffLog配置中driver字段为空,Liquibase无法正确加载数据库驱动识别配置
  2. 执行liquibaseDiff前未编译项目,Hibernate无法扫描到指定包下的实体类,导致referenceUrl配置失效

解决方案

  1. 补全diffLog配置中的driver字段为SQL Server驱动类:
diffLog {
    driver "com.microsoft.sqlserver.jdbc.SQLServerDriver" // 补全该行
    referenceUrl "hibernate:spring:nz.contoso.romeo.domain?dialect=org.hibernate.dialect.SQLServer2012Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy"
    url "jdbc:sqlserver://localhost:1433;database=romeo"
    username "user"
    password "supersecret"
    changeLogFile project.ext.diffChangelogFile
    defaultSchemaName ""
    logLevel "debug"
    classpath "$buildDir/classes/java/main"
}
  1. 执行liquibaseDiff前先运行编译命令,确保实体类已编译:
gradlew compileJava
  1. 额外注意:Java 8环境下需使用8.x版本的SQL Server驱动,9.x及以上版本最低要求Java 11,避免驱动版本不兼容导致配置失效。

内容的提问来源于stack exchange,提问作者Al Grant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:18:03