@NamedNativeQuery岁以上的@NamedQuery

2022-09-01 16:54:20

在冬眠或反之亦然中使用over有什么好处吗?我无法发现确切的区别,或者我们应该在哪种情况下使用@NamedQuery@NamedNativeQuery@NamedQuery@NamedNativeQuery

提前致谢。


答案 1

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

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


答案 2

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

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

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

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

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


推荐