2013-03-24 3 views
1

У меня есть фрагмент кода, где я использую hibernate-запрос. Он работает нормально. когда огнь выполнить этот код второго времени запрос не уволен, как он собирается из кэша запросовКэш запросов Hibernate применим для собственных запросов?

Session session = hibernateFactory.openSession(); 
    Query employeeQuery=session.createQuery("from Employee where employeeId=1");//line 1 
    employeeQuery.setCacheable(true); 
    Employee employee1=(Employee)employeeQuery.uniqueResult(); 
    session.close(); 

Но как только я заменяю line1 в выше фрагменте кода с ниже строками я получаю исключение

Query employeeQuery=session.createSQLQuery("select * from Employee where employeeId=1"); 

Execption является

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 
at org.hibernate.type.TypeHelper.disassemble(TypeHelper.java:146) 
at org.hibernate.cache.StandardQueryCache.put(StandardQueryCache.java:106) 
at org.hibernate.loader.Loader.putResultInQueryCache(Loader.java:2434) 
at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2321) 
at org.hibernate.loader.Loader.list(Loader.java:2268) 

является ли кэш запросов не применяется для собственных запросов?

Обновление: - Я думаю, кэш запросов применим для HQL не для собственного SQL. Но в документации на спящий режим его нигде не написано. Поэтому просто интересно, что я здесь ничего не пропал

+0

Можете ли вы дать добавить скаляры попробовать? Из-за исключения он выглядит так, как будто его отказ при преобразовании результатов в объект. http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html – sgp15

+0

Но addScalar требуется, когда я использую псевдоним столбца и хочу указать тип псевдонима. Если я не использую какие-либо псевдонимы, мне не нужно упоминать их правильно? –

+0

Вы правы. В этом случае Hibernate должен использовать 'ResultSetMetadata'. Но опять же, если SQL-запросы не поддерживаются в кешировании, Hibernate не должен смотреть в кеш на первом месте. Похоже, что это нужно будет сделать с некоторыми причудами. Возможно, попробуйте скаляры. Какую версию Hibernate вы используете? – sgp15

ответ

1

SQLQuery не поддерживает кеш. Это может помочь вам.

http://www.tutorialspoint.com/hibernate/hibernate_caching.htm

Это лучше использовать спящий режим SQL sintaxis.

+0

Я также думаю, что кэш запросов применим для HQL не для собственного SQL. Но в документации на спящий режим его нигде не написано :( –

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