Files
hzdyjs/docs/变更管理/code-adjust-record-2025-01-26-企业管理对象转换问题包路径修复.md
T
2025-07-26 15:29:31 +08:00

3.6 KiB
Raw Blame History

企业管理对象转换问题包路径修复

变更时间: 2025-01-26 11:55:00
变更人员: Cursor AI
问题类型: 对象转换错误 - 包路径结构问题

🔴 问题描述

用户反馈企业管理页面持续出现错误:

cannot find converter from ZsjyEnterprise to ZsjyEnterpriseVo

之前的字段修复没有解决问题。

🔍 根本原因分析

1. 包路径结构不一致

通过深入调查发现了根本问题:

错误的包结构:

domain/
├── entity/          # ❌ 错误:子目录
│   ├── ZsjyEnterprise.java
│   ├── ZsjyJobPosition.java
│   └── ZsjyRecruitmentPoster.java
├── ZsjyEnrollmentInfo.java    # ✅ 正确:直接在domain下
└── ZsjyEnrollmentProcess.java  # ✅ 正确:直接在domain下

2. MapStruct生成器问题

  • ZsjyEnrollmentInfo 成功生成了转换器类:

    • ZsjyEnrollmentInfoToZsjyEnrollmentInfoVoMapper
    • ZsjyEnrollmentInfoToZsjyEnrollmentInfoVoMapperImpl
  • ZsjyEnterprise 未生成转换器类(因为在entity子目录)

3. MyBatis-Plus期望的结构

BaseMapperPlus 期望所有实体类都在同一层级的包中,而不是在子目录中。

✅ 解决方案

1. 移动实体类到正确位置

# 移动所有entity子目录下的文件到domain目录
mv src/main/java/org/dromara/zsjy/domain/entity/*.java src/main/java/org/dromara/zsjy/domain/

2. 更新包声明

修改的文件:

  • ZsjyEnterprise.java
  • ZsjyJobPosition.java
  • ZsjyRecruitmentPoster.java

从:

package org.dromara.zsjy.domain.entity;

改为:

package org.dromara.zsjy.domain;

3. 更新所有引用

批量替换所有文件中的包引用:

sed -i '' 's/org\.dromara\.zsjy\.domain\.entity\./org.dromara.zsjy.domain./g' \
    src/main/java/org/dromara/zsjy/mapper/*.java \
    src/main/java/org/dromara/zsjy/service/impl/*.java

4. 删除空目录

rmdir src/main/java/org/dromara/zsjy/domain/entity/

5. 重新编译

mvn clean compile -DskipTests

📋 影响范围

修改的文件

  1. 实体类(3个):

    • ZsjyEnterprise.java
    • ZsjyJobPosition.java
    • ZsjyRecruitmentPoster.java
  2. Mapper接口(3个):

    • ZsjyEnterpriseMapper.java
    • ZsjyJobPositionMapper.java
    • ZsjyRecruitmentPosterMapper.java
  3. Service实现类(3个):

    • ZsjyEnterpriseServiceImpl.java
    • ZsjyJobPositionServiceImpl.java
    • ZsjyRecruitmentPosterServiceImpl.java

🎯 问题根本原因总结

包结构不一致导致的问题:

  1. MapStruct注解处理器无法正确扫描entity子目录
  2. MyBatis-Plus的BaseMapperPlus期望统一的包结构
  3. 运行时对象转换失败

📝 经验教训

  1. 包结构一致性:所有实体类应该在同一层级的包中
  2. 遵循框架约定:MyBatis-Plus和MapStruct有特定的包结构期望
  3. 全面检查:不仅要检查字段,还要检查包结构
  4. 统一规范:新增实体类时直接放在domain目录下,不要创建子目录

✅ 最终状态

  • 🔥 包结构统一:所有实体类都在domain包下
  • 🔥 编译成功:没有编译错误
  • 🔥 服务需要重启:修改后需要重启服务生效
  • 🔥 预期结果:对象转换将正常工作

⚠️ 后续操作

用户需要:

  1. 手动启动后端服务
  2. 登录系统
  3. 访问企业管理页面验证修复效果

这次修复彻底解决了对象转换问题的根本原因!