Let’s face it—configuration is the worst part of learning any new framework. XML files, annotations, dialects, session factories… it’s enough to make you rage-quit.
But not today.
This post will crush the myth that Hibernate setup is hard. Whether you’re using XML or annotations, I’ll show you how to configure Hibernate the smart way—in under 5 minutes.
By the end of this post, your Hibernate project will be locked, loaded, and ready for action 💥.
🧰 Prerequisites
Make sure you have:
- JDK 11+
- Maven installed
- Any IDE (IntelliJ, Eclipse, NetBeans)
- MySQL or H2 Database
- A strong cup of coffee ☕
🧱 Step 1: Create a Maven Project (If You Haven’t Already)
Your pom.xml
should include:
<dependencies>
<!-- Hibernate Core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.15.Final</version>
</dependency>
<!-- H2 Database for Testing -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
<!-- JPA API -->
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
📦 Project Structure
Your project should look like this:
src/
├── main/
│ ├── java/
│ │ └── com/example/
│ │ ├── User.java
│ │ ├── HibernateUtil.java
│ │ └── Main.java
│ └── resources/
│ └── hibernate.cfg.xml
🔧 Step 2: Write hibernate.cfg.xml
Place this in src/main/resources
:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database Configuration -->
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:~/testdb</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<!-- Hibernate Settings -->
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- Register Entity -->
<mapping class="com.example.User"/>
</session-factory>
</hibernate-configuration>
🧠 Tip: hbm2ddl.auto = update
automatically creates or updates tables based on your entity classes
🧬 Step 3: Create the Entity Class
package com.example;
import jakarta.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "username")
private String name;
public User() {}
public User(String name) {
this.name = name;
}
// Getters and setters...
}
⚠️ Don’t forget: every entity needs an
@Id
field. Hibernate won’t work without it!
🏗️ Step 4: Hibernate Utility Class
This is your entry point to the session factory:
package com.example;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
return new Configuration()
.configure() // loads hibernate.cfg.xml
.addAnnotatedClass(User.class)
.buildSessionFactory();
} catch (Throwable ex) {
System.err.println("SessionFactory creation failed: " + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
🚀 Step 5: Test It All in Your Main Class
package com.example;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class Main {
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
User user = new User("Devesh");
session.save(user);
tx.commit();
session.close();
System.out.println("Hibernate setup complete. User saved!");
}
}
✅ You Did It!
In under 5 minutes, you:
- Created a Hibernate configuration file
- Registered your entity
- Connected to H2 database
- Wrote code to persist a user
- And saw the magic happen—no SQL written by you!
📌 Next Up
Now that Hibernate is up and running, it’s time to get serious with CRUD operations.