【问题标题】:About JPA NamedNativeQuery compilation关于 JPA NamedNativeQuery 编译
【发布时间】:2018-09-19 08:57:01
【问题描述】:

@NamedNativeQuery 中指定的 sql 查询是否像 JPA 中的 @NamedQuery 一样预编译?我问这个是因为我找不到任何说明它是或不是的东西。

【问题讨论】:

标签: java jpa


【解决方案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 驱动程序的交互级别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2013-09-16
    • 1970-01-01
    • 2015-09-01
    • 2017-12-25
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多