【发布时间】:2018-09-19 08:57:01
【问题描述】:
在 @NamedNativeQuery 中指定的 sql 查询是否像 JPA 中的 @NamedQuery 一样预编译?我问这个是因为我找不到任何说明它是或不是的东西。
【问题讨论】:
-
这不是直接的问题,但它可能有助于观点stackoverflow.com/questions/27565706/…
在 @NamedNativeQuery 中指定的 sql 查询是否像 JPA 中的 @NamedQuery 一样预编译?我问这个是因为我找不到任何说明它是或不是的东西。
【问题讨论】:
@NamedQuery "pre-compilation" 基本上是提前翻译成原生查询语言(通常是 SQL),所以你可以在应用程序启动/第一次使用时只做一次,而不是每次您发出查询。
@NamedNativeQuery 查询已经用本地查询语言编写,因此从这个意义上说,它们是“本质上”预编译的。
【讨论】:
@NamedNativeQuery 进行预编译:P)
对带有@NamedNativeQuery 注释的查询执行的预处理量取决于 JPA 提供程序,但是您不应该假设发生了很多事情,因为查询是底层数据库的本机,所以在JPA 级别。如果您正在调用存储过程或特定于数据库的 JPA 不知道的东西,情况尤其如此。没有从 JPQL 到 SQL 的翻译。
幕后可能会发生一些针对那些命名查询的预准备语句的优化。但这取决于 JPA 提供程序及其与特定数据库的 JDBC 驱动程序的交互级别。
【讨论】: