本机查询如何从会话缓存中获取ResultSet?

时间:2019-06-19 16:02:10

标签: java hibernate

当我发现Hibernate Session#createNativeQuery(String)Session的缓存中运行(对DB的查询执行返回空结果,而本机查询能够返回数据)时,我感到很惊讶,所以我开始挖掘Hibernate的源代码,并在此调用链的末尾结束:

  1. Query #getResultList()
  2. AbstractProducedQuery #list()
  3. NativeQueryImpl #doList()
  4. AbstractSharedSessionContractlist(...)
  5. SessionImpl #listCustomQuery(...)
  6. CustomLoader #list(...)
  7. Loader #list(...)
  8. Loader #listIgnoreQueryCache(...)
  9. Loader #doList(...)
  10. Loader #doQueryAndInitializeNonLazyCollections
  11. Loader #doQuery(...)
  12. Loader #executeQueryStatement(...)
  13. Loader #executeQueryStatement(...)
  14. Loader #getResultSet(...)
  15. ResultSetReturnImplextract(PreparedStatement)

它看起来像是由JDBC连接器执行的查询,但不能执行,那么Hibernate如何针对PersistenceContext(缓存)执行查询?

rs = statement.executeQuery();

PreparedStatement创建于

  1. Loader #prepareQueryStatement()

    13.1 StatementPreparerImpl #prepareQueryStatement(...)

在我看来就像是针对DB的语句。

我想念什么吗?它从何处进入Session的缓存?

0 个答案:

没有答案