休眠命名查询是否在真正意义上进行了预编译?
2022-09-04 03:31:01
预编译的查询由数据库供应商(如oracle,sql server等)提前编译和缓存,以便它们可以更快地进行连续调用,如预准备语句。
在休眠中,命名查询被称为在 Web 服务器启动时预编译的。这是否意味着所有查询都是在服务器启动时触发的,以便它们可以由数据库供应商预编译,或者预编译在休眠上下文中具有不同的含义?
预编译的查询由数据库供应商(如oracle,sql server等)提前编译和缓存,以便它们可以更快地进行连续调用,如预准备语句。
在休眠中,命名查询被称为在 Web 服务器启动时预编译的。这是否意味着所有查询都是在服务器启动时触发的,以便它们可以由数据库供应商预编译,或者预编译在休眠上下文中具有不同的含义?
NamedQueryRepository
中,每个查询都由 NamedQueryDefinition
表示。由于用户可以动态添加筛选器、查询结果限制、锁和提示,因此 Hibernate 在执行之前无法预编译 HQL/JPQL。
ReadkStatement
,因此如果JDBC驱动程序支持它并且通过在单个数据库请求(例如MySQL,PostgreSQL)中多路复用准备和执行来模拟准备阶段,您也可以获得数据库语句预编译。