Liquibase Hibernate Gradle Plugin生成Diff报错,驱动无法识别
问题解决步骤
1. 匹配Liquibase与Hibernate版本(核心问题)
Spring Boot 3.x 默认使用 Hibernate 6.x,你当前配置的liquibase-hibernate5是适配Hibernate 5的版本,二者不兼容会导致Liquibase无法识别hibernate:spring:格式的referenceUrl,进而误将其当作普通JDBC URL处理,抛出驱动未找到的错误。
修改liquibaseRuntime中的Hibernate扩展依赖:
// 替换原有的liquibase-hibernate5为适配Hibernate 6的版本 liquibaseRuntime 'org.liquibase.ext:liquibase-hibernate6:4.21.1' // 统一liquibase-core版本,与implementation中的版本保持一致 liquibaseRuntime 'org.liquibase:liquibase-core:4.21.1'
2. 修正referenceUrl的参数格式
Gradle配置中无需使用HTML转义字符&,直接用&分隔参数即可,否则会导致参数解析失败:
referenceUrl "hibernate:spring:com.project.database.dto?dialect=org.hibernate.dialect.PostgreSQLDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy"
3. 清理冲突/冗余依赖
- 移除不必要的
mysql-connector-java依赖(你实际使用PostgreSQL) - 确保
liquibaseRuntime中的依赖版本统一,避免版本冲突
修改后的dependencies中liquibaseRuntime部分示例:
liquibaseRuntime 'org.springframework.boot:spring-boot-starter-data-jpa' liquibaseRuntime 'org.liquibase:liquibase-core:4.21.1' liquibaseRuntime 'org.liquibase:liquibase-groovy-dsl:3.0.2' liquibaseRuntime group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1' liquibaseRuntime("ch.qos.logback:logback-core:1.2.3") liquibaseRuntime("ch.qos.logback:logback-classic:1.2.3") liquibaseRuntime 'org.liquibase.ext:liquibase-hibernate6:4.21.1' liquibaseRuntime group: 'org.postgresql', name: 'postgresql', version: '42.6.0' liquibaseRuntime sourceSets.main.output
4. 执行Diff前先编译项目
Liquibase需要加载编译后的实体类,执行Diff命令前先完成编译:
gradle compileJava gradle liquibaseDiff
额外检查点
- 确认
com.project.database.dto包下确实存在标注@Entity等必要注解的Hibernate实体类 - 确保本地PostgreSQL服务正常运行,主库的url、用户名、密码配置正确
内容的提问来源于stack exchange,提问作者Ethan Solomon
相关产品推荐
相关产品推荐

