Что произойдет, если я исключу session.evict () из своего кода? - PullRequest
0 голосов
/ 30 апреля 2020

Я новичок в спящем режиме. Я хотел бы знать, есть ли у нас какие-либо альтернативы для session.evict (). Я прокомментировал эту строку, и мой лог c работает нормально.

1 Ответ

0 голосов
/ 30 апреля 2020

метод 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".

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...