Hibernate HQL обращается только к кэшу сеанса.

У меня возникли некоторые проблемы с пониманием того, откуда запрос HQLполучает информацию. В моем проекте используются разные потоки, и каждый поток читает/записывает в базу данных. Потоки не совместно используют объекты сеанса, вместо этого я использую класс HibernateUtil, который создает для меня сеансы.

До недавнего времени я закрывал сеанс только после написания, но не после прочтения. Изменения в объектах будут немедленно видны в базе данных , нопри чтении в других потоках (другой объект сеанса, отличный от того, который используется для записи) я получу устаревшую информацию. Чтение и запись всегда происходили в разных потоках, что означает разные объекты сеанса и разные кэши сеансов.

Я всегда думал, что, используя HQLвместо Criteria, я всегда буду ориентироваться на базу данных (или кеш второго уровня), а не на кеш сеанса, но при отладке моего кода это мне было ясно, что HQL ищет объект в кэше сеанса и извлекает старый устаревший объект.

Был ли я не прав, полагая, что HQLвсегда нацелен на базу данных? Или хотя бы кэш второго уровня?

PS: я использую только один объект SessionFactory.

7
задан alegen 10 May 2012 в 11:27
поделиться