You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate-jpamodelgen 6.1.5.Final无法生成JPA静态元模型

问题:Hibernate JPA静态元模型生成失败

我知道这个问题被问过很多次,但之前的答案都解决不了我的问题。我正尝试从实体生成JPA静态元模型用于Specification,但项目重建成功后,Hibernate JPA 2 Static-Metamodel Generator 6.1.5.Final并没有在annotations文件夹生成任何类。

环境:

  • Java 19
  • Spring Boot 2.7.5
  • Maven
  • IntelliJ

实体类(Test.java):

package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Test {
    @Id
    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

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>2.7.5</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.example</groupId>
   <artifactId>demo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>demo</name>
   <description>Demo project for Spring Boot</description>
   <properties>
      <java.version>19</java.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
      <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-jpamodelgen</artifactId>
         <version>6.1.5.Final</version>
      </dependency>
      <dependency>
         <groupId>jakarta.xml.bind</groupId>
         <artifactId>jakarta.xml.bind-api</artifactId>
         <version>4.0.0</version>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>

项目重建输出:

Clearing build system data...
Executing pre-compile tasks...
Cleaning output directories…
Running 'before' tasks
Checking sources
Copying resources... [demo]
Parsing java… [demo]
java: Hibernate JPA 2 Static-Metamodel Generator 6.1.5.Final
Writing classes… [demo]
Updating dependency information… [demo]
Adding @NotNull assertions… [demo]
Adding pattern assertions… [demo]
Adding Threading Model assertions… [demo]
Parsing java… [tests of demo]
Writing classes… [tests of demo]
Updating dependency information… [tests of demo]
Adding @NotNull assertions… [tests of demo]
Adding pattern assertions… [tests of demo]
Adding Threading Model assertions… [tests of demo]
Running 'after' tasks
javac 19 was used to compile java sources
Finished, saving caches…
Executing post-compile tasks...
Finished, saving caches…
Synchronizing output directories...
06-11-22 14:37 - Build completed successfully in 3 sec, 464 ms

IntelliJ注解处理器设置:
已勾选「Enable annotation processing」和「Obtain processors from project classpath」,生成路径设为模块根目录下的target\generated-sources\annotations。重建后target/generated-sources/annotations已被标记为源文件夹,但该文件夹为空,本该生成Test_类。

我已经查过相关帖子和官方文档,但问题还是没解决。


解决方案

试试下面几个步骤,应该能解决问题:

  1. 调整hibernate-jpamodelgen的依赖范围
    把hibernate-jpamodelgen的依赖加上provided范围,避免打包时带入,同时确保编译时能正确调用处理器:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <version>6.1.5.Final</version>
        <scope>provided</scope>
    </dependency>
    
  2. 在Maven中显式配置注解处理器
    光靠依赖有时候Maven不会自动触发处理器,需要在maven-compiler-plugin里明确指定:
    在pom.xml的<build><plugins>里添加:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.10.1</version>
        <configuration>
            <annotationProcessorPaths>
                <path>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-jpamodelgen</artifactId>
                    <version>6.1.5.Final</version>
                </path>
            </annotationProcessorPaths>
            <source>19</source>
            <target>19</target>
        </configuration>
    </plugin>
    
  3. 清理并重新构建项目

    • 先执行Maven命令:mvn clean compile,强制触发编译和注解处理
    • 如果用IntelliJ,执行「File → Invalidate Caches...」,然后重启IDE,再重新构建
  4. 检查JPA注解的包名
    Hibernate 6.x用的是Jakarta EE的注解(jakarta.persistence.*),而你的实体类用的是旧的javax.persistence.*。虽然Spring Boot 2.7.x兼容javax,但最好换成Jakarta的注解,避免处理器识别问题:

    import jakarta.persistence.Entity;
    import jakarta.persistence.Id;
    
  5. 检查IntelliJ的生成路径权限
    确保target/generated-sources/annotations目录有读写权限,有时候IDE权限问题会导致生成的文件被隐藏或无法写入。

按上面的步骤逐一排查,应该能生成Test_元模型类。


内容的提问来源于stack exchange,提问作者Joachim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:01:11