@NamedQuery over @NamedNativeQuery

Abh*_*bhi 23 java annotations hibernate hql

有没有使用任何好处@NamedQuery@NamedNativeQuery处于休眠或反之亦然.我不能发现确切的差异或在什么背景下,我们应该使用@NamedQuery@NamedNativeQuery

提前致谢.

Ole*_*ksi 32

@NamedNativeQuery允许您编写命名的SQL查询,同时@NamedQuery允许您编写命名的HQL查询(或JPQL).

通常,您应该更喜欢编写HQL查询,因为这样您就可以让Hibernate处理将HQL转换为各种SQL方言的复杂性.当您选择切换DBMS提供程序时,这将使您的工作更加简单.


Geo*_*e D 9

在考虑性能时,您必须了解引擎盖下发生的事情.

您可能已经使用简单的JDBC编写了一些东西,因此您知道如何将查询传递给驱动程序并发送到数据库.使用HQL或JPA-QL时,首先必须将查询解析为数据库可以理解的SQL语言.在这种情况下,我们之间有一个额外的解析步骤.请注意,本机SQL查询(包括存储过程调用),持久性框架仍然负责将JDBC结果集映射到持久对象的图形.

例如,如果要包含本机SQL提示以指示数据库管理系统查询优化器,则需要自己编写SQL.HQL和JPA-QL没有关键字.

将本机SQL放入映射元数据的缺点是数据库可移植性丢失,因为映射以及应用程序仅适用于特定数据库.但通常这是一个小问题,因为您可能没有创建一个必须在每个数据库上工作的框架.

当你想要了解查询的性能时,你真的必须查阅数据库并查看执行计划 - DBA可以准确地告诉你什么是好的以及可以优化什么.


Jef*_*eff 6

@NamedQuery应该使用查询语言(HQL或持久性查询语言)构造。 @NamedNativeQuery应该使用本机SQL构建。