метод session.evict () используется для удаления конкретного объекта из кэша, связанного с сеансом. Таким образом, его удаление заставит hibernate получить объект из базы данных, а не заглядывать в кеш. Пример
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
try
{
SomeEntity myEntity= (SomeEntity) session.load(SomeEntity.class, new Integer(1)); //look in cache (will not be found) if not found then fetch from database
System.out.println(myEntity.getName());
myEntity = (SomeEntity) session.load(SomeEntity.class, new Integer(1)); //look in cache(will be found) if not then fetch from database
System.out.println(myEntity.getName());
session.evict(myEntity); // will remove from cache
myEntity = (SomeEntity) session.load(SomeEntity.class, new Integer(1)); // object will again be fetched from database if not found in second level cache
System.out.println(myEntity.getName());
}
finally
{
session.getTransaction().commit();
HibernateUtil.shutdown();
}
Редактировать: Session.evict () удалит объект из кэша первого уровня, и после удаления объекта из сеанса любое изменение объекта не будет сохранено. Связанные объекты также будут отсоединены, если сопоставление сопоставлено с помощью cascade = "evict".
Надеюсь, это поможет !!