当前位置: 首页 > 面试题库 >

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

郎和志
2023-03-14
问题内容

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


问题答案:

询问

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

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

在Hibernate中,您可以使用session.createQuery()

本机查询

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

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

命名查询

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

类型查询

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



 类似资料:
  • 有人能帮我弄清楚在Hibernate中运行本机查询和循环运行命名查询之间的区别吗?我搜索了很多论坛,但没有得到一个清晰的视图。 我在代码中遇到的问题是,有两个查询,一个名为本机查询,一个名为查询。因此,当我在Hibernate中循环迭代查询时,在命名的本机查询中,我一次又一次地得到具有相同值的实体作为结果,但在命名查询的情况下,我得到了具有不同值的不同实体。为什么会发生这种情况? 我使用的数据库是

  • 问题内容: 简单的说,我总是对PHP / MySQL缓冲查询和非缓冲查询之间的区别是,缓冲(默认)将所有数据加载到结果集变量中, 然后 您可以开始使用它们,而无缓冲则在以下位置加载行:一个时间。 假设您先运行然后进行了,它将包含所有行和补充信息,例如行数。因此,如果您在100MB的数据库上执行此操作,那么如果那里没有索引,则可能会占用约100MB的空间)。 但是,我遇到了这样的SO溢出问题,其中一

  • 当使用jpa本机查询 事务传播是我们正在使用的正确jpa的唯一特性吗? 在我的意见中,我就像使用普通的旧jdbc pluc jpa事务传播 我正在阅读PRO JPA一书,根据我的理解 当我们使用JPA本机查询获取一组标量值时(与我们使用jdbc的方式很相似),实际上没有托管实体和持久性上下文的概念。当我们通过本机查询检索实体时,情况会发生变化。

  • 假设我们有下表,命名为“文档”: 两个*日期列是时间戳,而另一个都是字符串(甚至是) 目前我在Spring存储库中使用了以下本机查询: 如您所见,这必须用作本机查询,因为JPA不支持子句中的选择查询。现在我必须将此查询转换为JPQL查询,以使其独立于数据库。这在某种程度上是可能的吗?欢迎其他方法,例如使用规范或类似的...

  • 我想在我的repo中写一个本机查询“Select*in from table”。表名与实体名不同。 运行查询时, 1如果我把实体名称返回表未找到。 2如果我将表名放在查询中,则查询的验证失败。 问题是 如果我使用"Select*from TariffPacks r2..., nativeQuery=true",我得到错误TariffPacks不存在。如果我使用"Select*from RECHAR

  • 问题内容: Microsoft(和许多开发人员)声称SqlDataReader.GetOrdinal方法与使用命名查找即使用DataReader相比,提高了从DataReader检索值的性能。reader [“ ColumnName”]。问题是,如果处理小的分页记录集,那么 真正的 性能差异是什么?在整个代码中查找和引用序数索引是否值得付出额外的开销? 问题答案: Microsoft建议不要在循环