Попробуйте это
Object o = hibernateSession.createQuery("select foo where id = 1").uniqueResult();
// [BREAK POINT STOP] ==> I go in MySQL and I delete this item manualy.
hibernateSession.evict(o);
hibernateSession.createQuery("select foo where id = 1");
Если это работает, значит, у вас проблема с кешем L1. Кэш L1 ВСЕГДА там, связан с данным объектом Session и не зависит от кеша L2, о чем говорит вся документация кеша спящего режима. Цель кэша L1 состоит в том, чтобы удовлетворить требование, что если вы получаете один и тот же объект базы данных дважды в одном сеансе, две ссылки будут удовлетворять r1 == r2.
По сути, использование спящего режима, когда возможны параллельные изменения в БД, не является простым.