执行mvn liquibase:diff时遇NullPointerException问题求助
执行
mvn liquibase:diff时抛出NullPointerException的解决思路 问题背景
执行mvn liquibase:diff命令对比Hibernate实体与MySQL数据库结构时,构建失败,抛出异常:
java.lang.NullPointerException: Cannot invoke "java.sql.ResultSet.next()" because "schemas" is null
相关配置
liquibase.properties
driver:com.mysql.cj.jdbc.Driver changeLogFile:src/main/resources/db/changelog/dbchangelog.xml url:jdbc:mysql://localhost:3306/liquibase defaultSchemaName:liquibase username:liquibase password:liquibase hibernate.dialect:org.hibernate.dialect.MySQL8Dialect referenceUrl:hibernate:org.heller.liqibase.entity?dialect=org.hibernate.dialect.MySQL8Dialect referenceDefaultSchema:hibernate
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.5</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>org.heller.liquibase</groupId> <artifactId>liquibase</artifactId> <version>0.0.1-SNAPSHOT</version> <name>liquibase</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> <liquibase.version>4.27.0</liquibase.version> <liquibase-hibernate6.version>4.27.0</liquibase.version> <hibernate6.version>6.1.5.Final</hibernate6.version> <javassist.version>3.24.0-GA</javassist.version> <validation-api.version>3.0.2</validation-api.version> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>6.3.1.Final</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>4.27.0</version> <configuration> <propertyFile>liquibase.properties</propertyFile> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>${liquibase.version}</version> </dependency> <dependency> <groupId>org.liquibase.ext</groupId> <artifactId>liquibase-hibernate6</artifactId> <version>${liquibase-hibernate6.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>3.2.5</version> </dependency> <dependency> <groupId>jakarta.validation</groupId> <artifactId>jakarta.validation-api</artifactId> <version>${validation-api.version}</version> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>${javassist.version}</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
解决思路
- 修正实体包路径拼写错误:
referenceUrl中的org.heller.liqibase.entity存在拼写错误,应改为org.heller.liquibase.entity(缺少字母u),确保Liquibase能找到实体类并生成元数据。 - 调整参考schema配置:
referenceDefaultSchema设置为hibernate不合理,改为目标数据库的schema名称liquibase,或直接移除该配置。 - 确认实体类扫描有效性:检查实体类是否位于指定包下、带有
@Entity注解,且编译后的class文件存在于target/classes目录中。 - 验证数据库权限:确保数据库用户
liquibase拥有information_schema库的SELECT权限,Liquibase需要读取该库获取数据库元数据。 - 统一版本兼容性:当前Hibernate 6.3.1.Final与Liquibase 4.27.0可能存在版本不兼容问题,建议升级Liquibase到4.29.0+,或降低Hibernate版本到6.1.x系列,与pom中
hibernate6.version配置保持一致。
内容的提问来源于stack exchange,提问作者Petr Kostroun
相关产品推荐
相关产品推荐

