2015-11-16 2 views
1

Я создал объекты, которые еще не были совершены; в моем коде мне нужно запросить эти объекты. Случается, что запрос попадает в базу данных и всегда возвращает пустые результаты. Как сделать мой запрос сначала попадающим в кеш, затем базу данных?Hibernate запрос недействительных данных

благодаря

+0

http://stackoverflow.com/questions/5370482/whats-the-advantage-of-load-vs-get-in-hibernate –

ответ

0
MyObject myObject = session.get(MyObject.class, identifier); 

Взятые из другого поста, курсив мой.

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

Если вы хотите сделать выбор массы/критерий вместо выбора одной записи, вам необходимо зафиксировать объекты перед выполнением запроса. Невозможно смешивать и сопоставлять объекты из кэша и базы данных с запросом.

+0

Я действительно нашел способ запросить данные перед их совершением. Я просто сбросил сеанс (session.flush()), и это решило мою проблему. Для информации процесс очистки - это когда «Session будет выполнять инструкции SQL, необходимые для синхронизации состояния соединения JDBC с состоянием объектов, хранящихся в памяти» http://docs.jboss.org/hibernate/core/3.3/reference/en /html/objectstate.html#objectstate-flushing – oab

Смежные вопросы