关于 JPA NamedNativeQuery 编译
Posted
技术标签:
【中文标题】关于 JPA NamedNativeQuery 编译【英文标题】:About JPA NamedNativeQuery compilation 【发布时间】:2018-09-19 08:57:01 【问题描述】:在 @NamedNativeQuery
中指定的 sql 查询是否像 JPA 中的 @NamedQuery
一样预编译?我问这个是因为我找不到任何说明它是或不是的东西。
【问题讨论】:
这不是直接的问题,但它可能有助于观点***.com/questions/27565706/… 【参考方案1】:@NamedQuery
"pre-compilation" 基本上是提前翻译成原生查询语言(通常是 SQL),所以你可以在应用程序启动/第一次使用时只做一次,而不是每次您发出查询。
@NamedNativeQuery
查询已经用本地查询语言编写,因此从这个意义上说,它们是“本质上”预编译的。
【讨论】:
"查询已经用本地查询语言编写":不一定是真的。例如docs.jboss.org/hibernate/orm/current/userguide/html_single/… Hibernate 提供了这种别名引用,需要根据实体定义进行额外的翻译。 (但是我真的不知道它是否会为@NamedNativeQuery
进行预编译:P)
@Adrian Shum Hibernate 原生查询!= JPA 原生查询【参考方案2】:
对带有@NamedNativeQuery
注释的查询执行的预处理量取决于 JPA 提供程序,但是您不应该假设发生了很多事情,因为查询是底层数据库的本机,所以在JPA 级别。如果您正在调用存储过程或特定于数据库的 JPA 不知道的东西,情况尤其如此。没有从 JPQL 到 SQL 的翻译。
幕后可能会发生一些针对那些命名查询的预准备语句的优化。但这取决于 JPA 提供程序及其与特定数据库的 JDBC 驱动程序的交互级别。
【讨论】:
以上是关于关于 JPA NamedNativeQuery 编译的主要内容,如果未能解决你的问题,请参考以下文章
Eclipselink NamedNativeQuery 将列名作为参数而不是值传递