Как собственный запрос извлекает ResultSet из кэша сеанса? - PullRequest
0 голосов
/ 19 июня 2019

Я был удивлен, когда узнал, что Hibernate Session#createNativeQuery(String) работает с кешем Session (выполнение запроса к БД вернуло пустой результат, в то время как собственный запрос смог вернуть данные), поэтому я начал копаться в источнике Hibernateкод и заканчивается в конце этой цепочки вызовов:

  1. Запрос #getResultList()
  2. AbstractProducedQuery #list()
  3. NativeQueryImpl #doList()
  4. AbstractSharedSessionContract # list(...)
  5. SessionImpl #listCustomQuery(...)
  6. CustomLoader #list(...)
  7. Загрузчик #list(...)
  8. Загрузчик #listIgnoreQueryCache(...)
  9. Погрузчик #doList(...)
  10. Погрузчик #doQueryAndInitializeNonLazyCollections
  11. Погрузчик #doQuery(...)
  12. Загрузчик #executeQueryStatement(...)
  13. Загрузчик #executeQueryStatement(...)
  14. Загрузчик #getResultSet(...)
  15. ResultSetReturnImpl # extract(PreparedStatement).

Это похоже на запрос, выполненный соединителем JDBC, но не можетТак как же Hibernate выполняет запрос к PersistenceContext (кеш)?

rs = statement.executeQuery();

PreparedStatement, созданный в

Загрузчик #prepareQueryStatement()

13.1 StatementPreparerImpl #prepareQueryStatement(...)

выглядит как заявлениекоторый работает с БД.

Я что-то упустил?Где он попадает в кэш Session?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...