我正在尝试将Hibernate Criteria与命名查询进行性能比较。我知道这一切都取决于实际查询本身,最后一个词是它们在运行时的配置文件。尽管如此,仍在尝试整理每个查询的内容。
我试图将Q分为两部分
PART-1 -- Hibernate条件和命名查询的基本工作原理:
Criteria适用于参数。在运行时,查询不需要解析——有几个搜索和“表单存在”参数,例如对结果进行排序,将它们返回为可滚动的等。还没有阅读/验证过这一点,但Criteria通过字段的索引(基于在字段上设置的参数)来工作,以使其更快。
因此,与普通HQL相比,Criteria的优势在于它在执行过程中的速度。
命名查询与HQL相比也有同样的优势——查询在启动时被解析一次。然后从应用程序中任何需要的地方执行。
PART-2--比较两者:
所以在这张图片中,
条件和命名查询如何相互比较?
Criteria适用于跨多个表和多个参数的复杂查询——能够优化查询,从而使查询更快(?)
命名查询具有“随处定义一次”的优势,非常适合“轻量级”查询——通常在单个表上使用少量参数的不太复杂的搜索。在频繁查询上甚至更好。
注意:看过非常有用的Hibernate标准和HQL:哪个更快?在其他一些讨论中。
蒂亚。
从理论上讲,条件的开销应该比 HQL 查询少(命名查询除外,我将介绍)。这是因为条件不需要解析任何内容。HQL 查询使用基于 ANTLR 的解析器进行解析,然后将生成的 AST 转换为 SQL。但是,使用 HQL/JPAQL,您可以定义命名查询,其中 SQL 是在 SessionFactory 启动时生成的。从理论上讲,命名查询的开销小于条件。因此,就SQL生成开销而言,我们有:
以下是我在决定标准和HQL/JPAQL时考虑的事项:
您不会基于性能来选择其中一个。最终,它将成为一个SQL查询,重要的是SQL查询的性能。
执行 SQL 查询比分析 HQL 查询并将其转换为 SQL 慢几个数量级。因此,即使您不使用命名查询,性能也不会明显变差。
您可以根据功能和易读性选择标准而不是HQL。
如果需要可读的内容,请使用 HQL 查询。
如果您想根据各种可选的搜索条件动态组合查询,那么Criteria API允许这样做,并且比动态组合HQL查询更方便。
我试图比较Hibernate条件和命名查询的性能。我知道这一切都取决于实际的查询本身,最后一个字取决于它们在运行时如何配置文件。尽管如此,试图理清每一个都有什么。 我试图将Q分为两个部分&寻找两者的验证/更正: 命名查询与HQL相比具有相同的优势--查询在启动时被解析一次。然后从应用程序中任何必要的地方执行。 第2部分--比较两者: 所以在这张图里, 提亚。
我对命名查询有问题,但我不明白为什么它不工作。 我是这样定义查询的: 在这里我使用它: 错误:由:组织引起。冬眠HibernateException:命名查询中的错误:getUserRatings
假设类“X”映射到表“X”,类“A”映射到表“A”,类“B”映射到表“B”。 表X结构:(X_ID,一些其他列表A结构:(A_Id,X_Id,一些其他列)表B结构:(A_Id,一些其他列)...表B也有A_Id “B”类扩展了“A”类。我们将它们的映射文件都设置为: “A”类父映射文件: “B”类映射文件: 现在,我有一个SQL查询,如下所示,我需要使用hibernate criteria API
问题内容: 我正在寻找一个hibernate标准以获取以下信息: Dokument.class映射到角色roleId Role.class具有一个ContactPerson contactId Contact.class名字姓 我想在Contact类中搜索名字或姓氏,并检索连接的Dokuments列表。 我已经尝试过这样的事情: 我收到错误,无法为类“ Dokument”解析属性“ LastNam
There are only two hard problems in computer science: cache invalidation, naming things, and off-by-one errors. — Phil Karlton 当你维护代码时会发现,选择适当而有意义的信息为你的模块或类命名是有很大帮助的。 尤其是当其他人需要阅读或基于你编写的配置清单工作时,这种命名方法是
问题内容: 问题: 1)如果我从Hibernate 4.x升级到Hibernate 5.x,我仍然可以使用“旧”条件查询还是仅使用新的 Typed JPA2条件查询?旧的是否已弃用,还是可以同时使用? 2)我是否正确理解新的类型化标准会迫使我为我拥有的 每个 实体类创建第二个类,从而使类的数量重复?我应该手动创建这些类吗?如果没有,怎么办?兰特:必须重复上课似乎很奇怪,所以我一定会对它有所误解?那