查询,本机查询,命名查询和键入查询之间的区别

时间:2015-10-20 12:27:06

标签: sql hibernate jpa native-sql

查询,本机查询,命名查询和类型化查询之间有什么区别?单独站立'查询甚至存在,还是只是一个缩写?在我看来,本机Query是用简单的sql编写的查询,而命名查询是与实体(hibernate-mapping)相关。有人能简单解释一下吗?

1 个答案:

答案 0 :(得分:57)

<强>查询

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

在JPA中,您可以使用entityManager.createQuery()创建查询。您可以查看API了解更多详情。

在Hibernate中,您使用session.createQuery()&#34;

<强> NativeQuery

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

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

<强> NamedQuery

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

<强> TypedQuery

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