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

Chr*_*311 61 sql hibernate jpa native-sql

查询,本机查询,命名查询和类型查询之间有什么区别?"孤独的"查询是否存在,或者它只是一个缩写?在我看来,本机Query是用简单的sql编写的查询,而命名查询是与实体(hibernate-mapping)相关.有人能简单解释一下吗?

Abh*_*jan 66

询问

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

在JPA中,您可以使用创建查询entityManager.createQuery().您可以查看API以获取更多详细信息.

在Hibernate中,你使用session.createQuery()"

NativeQuery

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

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

NamedQuery

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

TypedQuery

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

  • 是否有任何性能,吞吐量,内存消耗,加载不同查询之间的应用程序服务器差异?我认为NamedQuery内存消耗大于查询,但我不能说查询的限制在哪里选择赞成一个或另一个.你能解释一下吗?提前致谢 (7认同)
  • 由于缺少更好的地方来提及这一点,因此我要补充一点,应该非常小心地将Hibernate _non-native_查询转换为本地查询,尤其要注意从本地查询返回时如何处理空值。我的团队最近看到了一些怪异的_SQLGrammarException:无法提取ResultSet_和_ORA-00932:数据类型不一致:当未考虑潜在的空值时,预期的NUMBER出现BINARY_错误。也许有人会偶然发现此评论,并知道了这个小窍门,可以更快地解决他们的问题。 (2认同)