在@NamedNativeQuery
中指定的sql查询是否像JPA中的@NamedQuery
一样预编译了?我之所以这样问,是因为我找不到任何说明它是或不是的东西。
答案 0 :(得分:3)
@NamedQuery
“ 预编译”基本上是预先翻译成本机查询语言(通常是SQL),因此您只能在应用程序启动/首次使用时执行一次,而不必每次您发出查询时。
@NamedNativeQuery
查询已经用本机查询语言编写,因此从这种意义上说,它们是“ 内在”预编译的。
答案 1 :(得分:0)
对用@NamedNativeQuery
注释的查询进行的预处理数量取决于JPA Provider,但是您不应假设正在发生太多事情,因为查询是基础数据库的本机,因此没有任何事情发生在JPA级别。如果您正在调用存储过程或某些JPA不太了解的数据库,则尤其如此。没有从JPQL到SQL的翻译。
在幕后可能发生的事情是针对那些命名查询的准备好的语句进行了一些优化。但这取决于JPA提供程序及其与特定数据库的JDBC驱动程序的交互级别。