Roa*_*oam 2 orm hibernate criteria named-query
我正在尝试将Hibernate Criteria与命名的性能查询进行比较.我知道这一切都取决于实际的查询本身,最后一个词是关于他们如何在运行时分析.仍然,试图理清每个内容.
我试图将Q分为两部分,并在两者上寻找验证/更正:
第1部分 - Hibernate Criteria和命名查询的工作原理如下:
标准适用于参数.在运行时,查询不需要解析 - 有几个搜索和"存在形式"参数,如命令结果,返回它们可滚动等.没有读取/验证这一点,但Criteria工作的字段索引(根据它们设置的参数)使速度更快.
因此,与普通HQL相比,Criteria的优势在于它在执行过程中的速度.
命名查询与HQL具有相同的优势 - 查询在启动时被解析一次.然后从应用程序中的任何需要执行.
第2部分 - 比较两者:
所以在这张照片中,
Criteria和named-queries如何相互比较?
标准适用于跨多个表和多个参数的复杂查询 - 具有优化的方法,从而使查询快速(?)
命名查询具有"定义一次使用 - 无处不在"的优点,并且对于"轻量级"查询非常好 - 通常在单个表上具有少量参数的较不复杂的搜索.频繁查询甚至更好.
注意:看到非常有用的Hibernate Criteria vs HQL:哪个更快?在其他一些讨论中.
TIA.
根据性能,您不能选择其中一个.最后,无论如何它都变成了SQL查询,重要的是SQL查询的性能.
执行SQL查询的速度比解析HQL查询并将其转换为SQL要慢.因此,即使您不使用命名查询,性能也不会明显变差.
您可以根据功能和可读性选择HQL的标准.
如果您想要可读的内容,请使用HQL查询.
如果您想基于各种可选的搜索条件动态撰写查询,那么Criteria API允许这样做,并且比动态编写HQL查询更方便.
理论上,标准应该比HQL查询具有更少的开销(命名查询除外,我将得到).这是因为Criteria不需要解析任何东西.使用基于ANTLR的解析器解析HQL查询,然后将生成的AST转换为SQL.但是,使用HQL/JPAQL,您可以定义命名查询,其中在SessionFactory启动时生成SQL.理论上,命名查询的开销小于Criteria.因此,就SQL生成开销而言,我们有:
在Criteria和HQL/JPAQL之间做出决定时,我会考虑以下事项:
| 归档时间: |
|
| 查看次数: |
9206 次 |
| 最近记录: |