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

Hibernate命名查询是否是在真正意义上预先编译的?

戈曾琪
2023-03-14
问题内容

预编译的查询由数据库供应商(例如oracle,sql server等)预先编译和缓存,因此对于诸如prepared语句之类的后续调用,它们可以更快。

在“hibernate命名”中,据说查询是在Web服务器启动时预先编译的。这是否意味着所有查询都会在服务器启动时自动触发,以便数据库供应商可以对其进行预编译,或者在hibernate上下文中进行预编译具有不同的含义?


问题答案:
  1. Hibernate命名查询以对象查询语言(JPQL或HQL)表示,因此Hibernate需要首先将它们转换为SQL。命名查询存储在NamedQueryRepository中,每个查询由NamedQueryDefinition表示。

由于用户可以动态添加过滤器,查询结果限制,锁定和提示,因此Hibernate在执行之前无法预编译HQL / JPQL。

  1. Hibernate还为每个SELECT和DML语句使用PreparedStatement,因此,如果JDBC驱动程序支持它并且不通过在单个数据库请求(例如MySQL,PostgreSQL)中复用prepare和execute来模拟prepare阶段,则还可以获取数据库语句预编译。 )。


 类似资料:
  • 问题内容: 一位新同事刚刚建议在Hibernate中使用带有注释(即@NamedQuery)的命名HQL查询,而不是将HQL嵌入到我们的XxxxRepository类中。 我想知道的是,使用注释是否可以提供集中查询以外的任何优势? 特别是,是否有一些性能提升,例如因为查询仅在加载类时解析一次,而不是每次执行Repository方法时解析一次? 问题答案: 来自Pro EJB 3(Mike Keit

  • 我对命名查询有问题,但我不明白为什么它不工作。 我是这样定义查询的: 在这里我使用它: 错误:由:组织引起。冬眠HibernateException:命名查询中的错误:getUserRatings

  • 本文向大家介绍什么是预编译,何时需要预编译:相关面试题,主要包含被问及什么是预编译,何时需要预编译:时的应答技巧和注意事项,需要的朋友参考一下 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

  • 互联网上的大多数网站都说: “使用命令编译文件。然后使用命令运行它” 但是今天我试着运行一个没有javac的java程序,得到了一个奇怪的结果。 下面是名为的文件的内容: 然后我跑: 这给了我这个错误: 但是,当我在没有命令的情况下运行它时,它执行时没有任何错误。 命令是否也编译程序?如果是,为什么我们需要命令? 我的java版本是:

  • 问题内容: 我正在尝试将我的命名查询放入orm.xml(与persistence.xml一起放入META-INF中),但是hibernate / jpa似乎忽略了我的orm.xml。 当我尝试使用em.createNamedQuery(“ myQuery”)创建命名查询时,它返回找不到该查询的信息。 我使用注释,我想在orm.xml中外部化我的命名查询(仅此)。 这是我的persistence.x

  • 我试图比较Hibernate条件和命名查询的性能。我知道这一切都取决于实际的查询本身,最后一个字取决于它们在运行时如何配置文件。尽管如此,试图理清每一个都有什么。 我试图将Q分为两个部分&寻找两者的验证/更正: 命名查询与HQL相比具有相同的优势--查询在启动时被解析一次。然后从应用程序中任何必要的地方执行。 第2部分--比较两者: 所以在这张图里, 提亚。