Я был удивлен, когда узнал, что Hibernate Session#createNativeQuery(String)
работает с кешем Session
(выполнение запроса к БД вернуло пустой результат, в то время как собственный запрос смог вернуть данные), поэтому я начал копаться в источнике Hibernateкод и заканчивается в конце этой цепочки вызовов:
- Запрос
#getResultList()
- AbstractProducedQuery
#list()
- NativeQueryImpl
#doList()
- AbstractSharedSessionContract #
list(...)
- SessionImpl
#listCustomQuery(...)
- CustomLoader
#list(...)
- Загрузчик
#list(...)
- Загрузчик
#listIgnoreQueryCache(...)
- Погрузчик
#doList(...)
- Погрузчик
#doQueryAndInitializeNonLazyCollections
- Погрузчик
#doQuery(...)
- Загрузчик
#executeQueryStatement(...)
- Загрузчик
#executeQueryStatement(...)
- Загрузчик
#getResultSet(...)
- ResultSetReturnImpl #
extract(PreparedStatement)
.
Это похоже на запрос, выполненный соединителем JDBC, но не можетТак как же Hibernate выполняет запрос к PersistenceContext
(кеш)?
rs = statement.executeQuery();
PreparedStatement
, созданный в
Загрузчик #prepareQueryStatement()
13.1 StatementPreparerImpl #prepareQueryStatement(...)
выглядит как заявлениекоторый работает с БД.
Я что-то упустил?Где он попадает в кэш Session
?