问题描述:公司的老项目中,存在大量的"类名_",如图所示,但是并没有找到相应的实体类,执行打包时报出找不到符号错误。
问题原因:在 JPA 中,带有下划线后缀的类(如 AuthRes_)被称为 静态元模型类。它的作用是将实体类的属性名映射为强类型的字段,从而避免在编写 Criteria API 查询时使用硬编码的字符串(例如把 "authId" 替换为 AuthRes_.authId),实现编译期检查。
解决办法:要生成这个类,你需要使用 JPA 规范提供的 注解处理器。以下是具体的配置方法:
1.引入依赖
确保你的项目中包含了 hibernate-jpamodelgen(如果你使用的是 Hibernate)或相应的 JPA 处理器依赖。
mavan示例:
bash
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>你的Hibernate版本</version>
<scope>provided</scope> <!-- 仅在编译期使用,不需要打包 -->
</dependency>
2.配置注解处理器
根据你使用的构建工具,配置处理器路径:
bash
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>你的Hibernate版本</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
3.执行编译
配置完成后,执行普通的编译命令(如 mvn compile 或 gradle build)。
在编译过程中,注解处理器会扫描带有 @Entity 注解的类(如你的 AuthRes),并自动在 target/generated-sources/annotations(Maven 默认路径)下生成对应的 AuthRes_.java 源文件,随后它会被一起编译成 AuthRes_.class。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
- IDE 中的处理 (但是我项目中这个没有起作用。)
如果你使用的是 IntelliJ IDEA,通常不需要手动配置上述 Maven/Gradle 插件,IDE 会自动识别 hibernate-jpamodelgen 依赖并在后台自动生成。
如果 IDE 报错找不到 AuthRes_,请尝试:Build -> Rebuild Project。
确保在 IDEA 的 Settings 中勾选了 Enable annotation processing。