Hibernate Session.evict() Method Example

In this short article, we will learn how to remove cache objects from the first level cache using Session.evict() method with an example.
The Session.evict() is used to remove a particular object from the cache associated with the session.

void org.hibernate.Session.evict(Object object)

This method removes this instance from the session cache. Changes to the instance will not be synchronized with the database. This operation cascades to associated instances if the association is mapped with cascade="evict".

Hibernate Session.evict() Method Example

The Session.evict() is used to remove a particular object from the cache associated with the session.
package net.javaguides.hibernate.tutorial;

import org.hibernate.Session;
import org.hibernate.Transaction;

import net.javaguides.hibernate.tutorial.config.HibernateJavaConfig;
import net.javaguides.hibernate.tutorial.entity.Student;

public class RemoveFirstCacheDemo {

    public static void main(String[] args) {

        Transaction transaction = null;
        try (Session session = HibernateJavaConfig.getSessionfactory().openSession()) {

            // start the transaction
            transaction = session.beginTransaction();

            // get the student entity using id
            Student student1 = session.load(Student.class, new Long(1));

            System.out.println(student1.getFirstName());
            System.out.println(student1.getLastName());
            System.out.println(student1.getEmail());

            // load student entity by id
            Student student2 = session.load(Student.class, new Long(1));
            System.out.println(student2.getFirstName());
            System.out.println(student2.getLastName());
            System.out.println(student2.getEmail());

            session.evict(student2);
            // load student entity by id
            Student student3 = session.load(Student.class, new Long(1));
            System.out.println(student3.getFirstName());
            System.out.println(student3.getLastName());
            System.out.println(student3.getEmail());

            // commit transaction
            transaction.commit();

        } catch (Exception e) {
            if (transaction != null) {
                transaction.rollback();
            }
        }
    }
}
Output:
Hibernate: select student0_.id as id1_0_0_, student0_.email as email2_0_0_, student0_.first_name as first_na3_0_0_, student0_.last_name as last_nam4_0_0_ from student student0_ where student0_.id=?
Prabhas
Fadatare
prabhas@gmail.com
Prabhas
Fadatare
prabhas@gmail.com
Hibernate: select student0_.id as id1_0_0_, student0_.email as email2_0_0_, student0_.first_name as first_na3_0_0_, student0_.last_name as last_nam4_0_0_ from student student0_ where student0_.id=?
Prabhas
Fadatare
prabhas@gmail.com
Clearly, the evict() method removed the student object from the cache so that it was fetched again from the database.

Comments