当我发现Hibernate Session#createNativeQuery(String)
在Session
的缓存中运行(对DB的查询执行返回空结果,而本机查询能够返回数据)时,我感到很惊讶,所以我开始挖掘Hibernate的源代码,并在此调用链的末尾结束:
#getResultList()
#list()
#doList()
list(...)
#listCustomQuery(...)
#list(...)
#list(...)
#listIgnoreQueryCache(...)
#doList(...)
#doQueryAndInitializeNonLazyCollections
#doQuery(...)
#executeQueryStatement(...)
#executeQueryStatement(...)
#getResultSet(...)
extract(PreparedStatement)
。它看起来像是由JDBC连接器执行的查询,但不能执行,那么Hibernate如何针对PersistenceContext
(缓存)执行查询?
rs = statement.executeQuery();
PreparedStatement
创建于
Loader #prepareQueryStatement()
13.1 StatementPreparerImpl #prepareQueryStatement(...)
在我看来就像是针对DB的语句。
我想念什么吗?它从何处进入Session
的缓存?