查询、本机查询、命名查询和类型化查询之间的区别

查询、本机查询、命名查询和类型化查询之间的区别是什么?“独立”查询是否存在,或者它只是一个缩写?在我看来,本机查询是用简单的 sql 编写的查询,而命名查询与实体相关(hibernate 映射)。有人能简单解释一下吗?

111129 次浏览

质疑

Query 指的是 JPQL/HQL 查询,其语法类似于通常用于执行 DML 语句(CRUD 操作)的 SQL。

在 JPA 中,可以使用 entityManager.createQuery()创建查询。

在 Hibernate 中,使用 session.createQuery()

NativeQuery

本机查询引用实际的 sql 查询(引用实际的数据库对象)。这些查询是可以使用数据库客户机在数据库中直接执行的 sql 语句。

entityManager.createNativeQuery() Hibernate (非 JPA 实现) : session.createSQLQuery()

NamedQuery

类似于常量的定义方式。NamedQuery 是通过给查询命名来定义查询的方式。您可以在休眠状态的映射文件中定义它,也可以在实体级别使用注释。

TypedQuery

TypedQuery 提供了一个选项,可以在创建查询时提及实体的类型,因此此后的任何操作都不需要显式强制转换为预期的类型。而普通的 Query API 并不返回您所期望的 Object 的确切类型,您需要强制转换。