Когда свойство cacheQueries
HibernateTemplate имеет значение true, оно автоматически заставляет каждый Query
или Criteria
выполнять кэширование.Т.е. он вызывает Query.setCacheable (true) и Criteria.setCacheable (true) перед выполнением запроса / критериев.
Итак, ваш шаблон на самом деле состоит в том, чтобы сделать запрос, который вы собираетесь выполнить, кэшируемым, а затем сбросить флаг на false, чтобы следующий запрос не был сделан кэшируемым.
Проблемав том, что если HibernateTemplate используется несколькими потоками, результаты использования этого шаблона являются неопределенными.Возможно, поток установит для флага значение true, а затем другой сразу же сбросит его до false, прежде чем первый поток успеет выполнить свой запрос.А поскольку доступ к свойству не синхронизирован, у вас также могут быть проблемы с видимостью.
Я бы использовал HibernateTemplate.setCacheable(true)
только при создании HibernateTemplate, чтобы убедиться, что all выполняемые запросы кешируются.Если вы этого не хотите, то используйте два разных экземпляра HibernateTemplate (один с включенным кешем, а другой без него) или используйте API Hibernate напрямую, если вам нужно другое поведение кэширования.
Относительно вашего исключениябез знания прецедента, точного исключения и его трассировки стека диагностировать сложно.