Using Hibernate Annotations in JPA Projects on WildFly

Hibernate annotations play a key role in mapping Java objects to database tables in JPA projects running on WildFly. However, integrating these annotations seamlessly requires proper dependencies and configurations to avoid runtime errors.

The Issue with Using Hibernate Annotations in WildFly

Hibernate annotations are available in Hibernate core project. Therefore, in order to compile your project, you will need the following dependency in your pom.xml:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>6.4.1.Final</version>
    <scope>provided</scope>
</dependency>

However, when running on WildFly, Hibernate annotations will not be available as default module. Therefore, if you try to deploy a project with Hibernate annotations you will have the following error:

Caused by: java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/XProperty

The Solution

To resolve this issue, you have two options:

The first option is to add a dependencies entry to the MANIFEST.MF file with a comma-separated list of dependency module names:

Dependencies: org.hibernate.commons-annotations

Please note that you can also add the following configuration to the packaging plug-in configuration in the project’s pom.xml file.

<configuration>
   <archive>
      <manifestEntries>
         <Dependencies>org.hibernate.commons-annotations</Dependencies>
      </manifestEntries>
   </archive>
</configuration>

The second option is to include in the file jboss-deployment-structure.xml the following dependency:

<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.hibernate.commons-annotations"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

These configurations ensure that the required Hibernate annotations are available within the WildFly environment, preventing class loading issues during runtime.

Example: Using Hibernate Annotations in a JPA Entity

Let’s consider a simple example demonstrating the use of Hibernate annotations in a JPA entity:

import javax.persistence.*;
import org.hibernate.annotations.Type;

@Entity
@Table(name = "employees")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "full_name")
    private String fullName;

    @Column(name = "salary")
    private double salary;

    @Type(type = "text")
    @Column(name = "details")
    private String details;

    // Getters and setters omitted for brevity
}

In this example:

  • @Entity marks the class as a JPA entity.
  • @Table specifies the table name for mapping.
  • @Id and @GeneratedValue define the primary key and its generation strategy.
  • @Column maps entity fields to table columns, specifying column names.
  • @Type from Hibernate annotations allows custom types, here used to define a field as text type.

Ensure the Hibernate annotations, especially @Type, are accessible by applying the proper dependency configurations in your WildFly deployment descriptor.

By employing these annotations, JPA entities can be precisely mapped to database tables, leveraging the full potential of Hibernate in your WildFly-based JPA projects.

Finally, for a full example, about using JSON Type in JPA Projects, check this article: How to store JSON Data with JPA and Hibernate


Recommended Articles

Optimizing Database Interactions with Hibernate Annotations: A Comprehensive Guide

Learn about Hibernate annotations for optimizing SQL updates and inserts in Java applications. #Hibernate #JPA #DatabaseOptimization

A Simple Guide to Understanding Hibernate vs JPA

Learn the key differences between Hibernate and JPA with this concise guide. #Hibernate #JPA #ORM #Java #CloudNative

Replace Hibernate XML Configuration with JPA Annotations for Enterprise Java Applications

Learn how to use JPA annotations instead of XML files for mapping Entities in your enterprise Java applications. #Hibernate #JPA #Java #CloudNative

Create a JPA Project with Maven Archetype, Hibernate 4, and MySQL - Step-by-Step Guide

Learn how to create a JPA project using Maven archetype, modify it for Hibernate 4 JPA Provider and MySQL integration. #MavenArchetype #Hibernate4 #JPA #MySQL #JavaDev