JHipster降级至v7.9.3后运行报错:无法找到相关类符号
解决JHipster v7.9.3重建项目后的编译错误
错误原因分析
你遇到的编译错误是从JHipster v8降级到v7.9.3后,项目残留了高版本依赖(Hibernate 6+、高版本SpringDoc)的代码/注解,而v7.9.3依赖的低版本库中不存在这些类:
JdbcTypeCode、SqlTypes是**Hibernate 6+**新增类,JHipster v7.9.3依赖的是Hibernate 5.x,因此找不到这些类。ParameterObject是高版本SpringDoc的注解,JHipster v7.9.3搭配的SpringDoc版本不包含该注解。
具体修复步骤
1. 替换Hibernate 6专属代码
移除Hibernate 6的注解,改用Hibernate 5的等价实现:
- 删除
import org.hibernate.annotations.JdbcTypeCode;和import org.hibernate.type.SqlTypes; - 用
@Type+@Column组合定义字段类型,示例:// 原Hibernate 6代码 @JdbcTypeCode(SqlTypes.JSON) private Map<String, Object> metadata; // 替换为Hibernate 5代码 @Type(type = "json") @Column(columnDefinition = "json") private Map<String, Object> metadata; - 若需引用JDBC类型常量,改用
java.sql.Types包下的常量(如java.sql.Types.VARCHAR)。
2. 替换SpringDoc的ParameterObject注解
JHipster v7.9.3不支持ParameterObject,可选择以下两种替换方式:
- 方式一:逐个参数添加
@RequestParam// 原代码 @GetMapping("/projects") public ResponseEntity<List<Project>> getAllProjects(@ParameterObject ProjectCriteria criteria) { // ... } // 替换为 @GetMapping("/projects") public ResponseEntity<List<Project>> getAllProjects( @RequestParam(required = false) String name, @RequestParam(required = false) LocalDate startDate // 其他参数逐一列出 ) { ProjectCriteria criteria = new ProjectCriteria(); criteria.setName(name); criteria.setStartDate(startDate); // ... } - 方式二:使用Spring原生
@ModelAttribute@GetMapping("/projects") public ResponseEntity<List<Project>> getAllProjects(@ModelAttribute ProjectCriteria criteria) { // ... }
3. 确认依赖版本匹配
检查pom.xml,确保依赖版本与JHipster v7.9.3一致:
- Hibernate相关依赖版本应为
5.6.x左右,禁止手动引入Hibernate 6+依赖。 - SpringDoc相关依赖版本应为
1.6.x左右,示例:<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.6.14</version> </dependency>
4. 清理缓存后重新构建
执行命令清理并重新编译项目:
./mvnw clean install
内容的提问来源于stack exchange,提问作者Diana
相关产品推荐
相关产品推荐

