JPA Hibernate Tutorial

In this JPA Hibernate tutorial, we will learn step by step how to configure JPA with Hibernate implementation with an example.
Learn and master in JPA with examples at JPA Tutorial - Java Persistence API.
Learn and master in Hibernate framework at Hibernate Tutorial

What is the Java Persistence API? 

The Java Persistence API provides a specification for persisting, reading, and managing data from your Java object to relational tables in the database.

Read more about JPA at JPA Tutorial - Java Persistence API (you will learn everything about JPA here)

What is Hibernate Framework?

Hibernate is an Object/Relational Mapping solution for Java environments. Object-relational mapping or ORM is the programming technique to map application domain model objects to the relational database tables. Hibernate is a java based ORM tool that provides a framework for mapping application domain objects to the relational database tables and vice versa.
Hibernate provides a reference implementation of the Java Persistence API, which makes it a great choice as an ORM tool with the benefits of loose coupling.

For example, let's look at the below diagram shows the mapping between the Student java model and the database relational student table:
Read more about the Hibernate framework at Hibernate ORM Tutorial (you will learn everything about Hibernate here).

What is the Difference Between JPA and Hibernate? 

As we know that JPA is just a specification, meaning there is no implementation. You can annotate your classes as much as you would like with JPA annotations, however, without an implementation, nothing will happen. Think of JPA as the guidelines that must be followed or an interface, while Hibernate's JPA implementation is code that meets the API as defined by the JPA specification and provides the under-the-hood functionality.

In short, JPA is the interface while Hibernate is the implementation.

Traditionally there have been multiple Java ORM solutions:
Each of the above implementations defines its own mapping definition or client API. The JPA expert group gathered the best of all these tools and so they created the Java Persistence API standard.

The benefit of this is that you can swap out Hibernate's implementation of JPA for another implementation of the JPA specification. 
In this JPA Hibernate tutorial, we will show you how to create or configure a simple JPA application with Hibernate framework.

Technologies and tools used

  • Hibernate 5.3.7.Final
  • JPA 2.1
  • IDE - Eclipse Noen
  • Maven 3.5.3
  • JavaSE 1.8
  • MySQL - 8.0.13
Let's start developing step by step Hibernate application using Maven as project management and build tool.

Development Steps

  1. Create a Simple Maven Project
  2. Project Directory Structure
  3. Add jar Dependencies to pom.xml
  4. Creating the JPA Entity Class(Persistent class)
  5. Create a JPA configuration file
  6. Create a JPA helper class
  7. Create the Main class and Run an Application

1. Create a Simple Maven Project

Use the How to Create a Simple Maven Project in Eclipse article to create a simple Maven project in Eclipse IDE.

2. Project Directory Structure

The project directory structure for your reference - 

3. Add jar Dependencies to pom.xml

        <!-- -->
        <!-- -->

4. Creating the JPA Entity Class(Persistent class)

Let's create a Student entity class under net.javaguides.hibernate.entity package as follows.
package net.javaguides.hibernate.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "student")
public class Student {

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "email")
    private String email;

    public Student() {


    public Student(String firstName, String lastName, String email) {
        this.firstName = firstName;
        this.lastName = lastName; = email;

    public int getId() {
        return id;

    public void setId(int id) { = id;

    public String getFirstName() {
        return firstName;

    public void setFirstName(String firstName) {
        this.firstName = firstName;

    public String getLastName() {
        return lastName;

    public void setLastName(String lastName) {
        this.lastName = lastName;

    public String getEmail() {
        return email;

    public void setEmail(String email) { = email;

    public String toString() {
        return "Student [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + "]";

5. Create a JPA configuration file

Create an XML file named persistence.xml under the src/main/java/META-INF folder and write the following code in it.
    <persistence-unit name="PERSISTENCE">
        <description> Hibernate JPA Configuration Example</description>
            <property name="javax.persistence.jdbc.driver"
    value="com.mysql.cj.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url"
    value="jdbc:mysql://localhost:3306/hibernate_db" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password"
    value="root" />
            <property name="hibernate.show_sql" value="true" />
            <property name="" value="create-drop" />

6. Create a JPA helper class

Create a helper class to bootstrap a JPA EntityManagerFactory.
package net.javaguides.hibernate.util;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class JPAUtil {
    private static final String PERSISTENCE_UNIT_NAME = "PERSISTENCE";
    private static EntityManagerFactory factory;

    public static EntityManagerFactory getEntityManagerFactory() {
        if (factory == null) {
            factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        return factory;

    public static void shutdown() {
        if (factory != null) {

7. Create the main class and run an application

Here is the main class to persist the student object using the EntityManager#persist method.
package net.javaguides.hibernate;

import javax.persistence.EntityManager;

import net.javaguides.hibernate.entity.Student;
import net.javaguides.hibernate.util.JPAUtil;

public class App {
    public static void main(String[] args) {

        EntityManager entityManager = JPAUtil.getEntityManagerFactory().createEntityManager();

        Student student = new Student("Ramesh", "Fadatare", "");




Related Tutorials

Hibernate 5 XML Configuration Example - In this article, we will show you how to create a Hibernate Application using hibernate.cfg.xml configuration to connect to the MySQL database.

Hibernate 5 Java Configuration Example - In this article, we will show you how to create a Hibernate Application using Java configuration without using hibernate.cfg.xml to connect to the MySQL database.

GitHub Repository

The complete source code of this article is available on my GitHub Repository -


In this post, we have shown you how to create or configure a simple JPA application with Hibernate.
You can learn more about Hibernate ORM Framework at Hibernate Tutorial


Free Spring Boot Tutorial | Full In-depth Course | Learn Spring Boot in 10 Hours

Watch this course on YouTube at Spring Boot Tutorial | Fee 10 Hours Full Course