Rabu, 14 Januari 2026

Cara Mengatasi Hibernate Metamodel (jpamodelgen -> hibernate-processor) Tidak Ter-generate Otomatis di Spring Boot 4.0.1

Bagi pengembang Java yang menggunakan Spring Data JPA, JPA Metamodel (kelas yang biasanya berakhiran dengan _, misal User_.java) sangat membantu untuk membuat query yang type-safe menggunakan Criteria API.

Biasanya, kita cukup menambahkan hibernate-processor dan semuanya berjalan lancar. Namun, jika Anda saat ini sedang mengalami masalah di mana metamodel tetap tidak ter-generate padahal Anda sudah menambahkan dependency tersebut, silakan ikuti langkah-langkah berikut untuk mengatasinya.

1. Pastikan Kelengkapan Dependency

Langkah pertama, pastikan dependency hibernate-processor sudah terpasang. Selain itu, untuk lingkungan Java versi terbaru di Spring Boot 4, tambahan jakarta.xml.bind-api seringkali diperlukan agar proses annotation processing berjalan sempurna.

Tambahkan baris berikut ke pom.xml Anda:

XML
<dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-processor</artifactId>
</dependency>
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
</dependency>

2. Cek Konfigurasi Build Plugin (Penting)

Ini adalah penyebab yang sering tidak disadari. Jika metamodel masih belum muncul setelah langkah pertama, kemungkinan besar ada konfigurasi maven-compiler-plugin yang "menghalangi" Hibernate Processor.

Jika di pom.xml Anda terdapat blok konfigurasi seperti di bawah ini (biasanya otomatis ada jika menggunakan Lombok), disarankan untuk dihapus:

XML
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

Menghapus konfigurasi eksplisit ini akan membiarkan Maven mendeteksi semua processor (baik Lombok maupun Hibernate) secara otomatis dari dependency yang terdaftar.

3. Contoh Implementasi POM Lengkap

Berikut adalah contoh pom.xml bersih yang sudah teruji menghasilkan metamodel dengan sukses:

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>4.0.1</version>
       <relativePath/> </parent>
    
    <groupId>com.contoh.app</groupId>
    <artifactId>demo-project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-project</name>
    <description>Demo Application</description>
    
    <properties>
       <java.version>25</java.version>
       <maven.compiler.source>25</maven.compiler.source>
       <maven.compiler.target>25</maven.compiler.target>
       <maven.compiler.proc>full</maven.compiler.proc>
    </properties>
    
    <dependencies>
        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>org.hibernate.orm</groupId>
            <artifactId>hibernate-processor</artifactId>
        </dependency>
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
        </dependency>
        </dependencies>
    <!-- OPTIONAL -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                     <mainClass>com.contoh.app.DemoApplication</mainClass>
                </configuration>
                 <executions>
                     <execution>
                         <goals>
                             <goal>repackage</goal>
                         </goals>
                     </execution>
                 </executions>
            </plugin>
        </plugins>
    </build>
<!-- END-OPTIONAL --></project>

Penutup

Setelah menyesuaikan pom.xml, jangan lupa jalankan perintah mvn clean compile atau lakukan Reload Project di IDE Anda. Seharusnya folder generated-sources kini sudah terisi dengan kelas metamodel yang Anda butuhkan.

Tidak ada komentar:

Posting Komentar