我一直在读一些回忆录,但我还是很困惑。为什么?因为您提到的差异与性能无关。它们与易用性有关(Objetc(标准)和SQL(hql))。但我想知道"criteria“是不是因为某种原因比hql慢。
我在另一本书里读到了这篇文章
HQL和criteriaQuery在性能方面存在差异,每次您使用criteriaQuery触发查询时,它都会为表名创建新的别名,该别名不会反映在任何数据库的上次查询缓存中。这会导致编译生成的SQL的开销,从而花费更多时间执行。瓦伦·梅塔写的。
这是非常接近,但是!我在另一个网站(http://gary-rowe.com/agilestack/tag/hibernate/)上看到,这不再是Hibernate 3.3及以上版本的情况(请阅读这个: 9) Hibernate速度很慢,因为Criteria接口生成的SQL不一致)
我已经做了一些测试,试图找出差异,但两者都生成qry,并且它不会更改表的别名。
我很困惑。如果有人知道主要原因,你能帮助我们吗?谢谢
发布于 2012-11-14 09:19:14
我正在制作数百万张唱片。我发现HQL比Criteria快得多。Criteria在性能上有很大的滞后。
如果您正在处理大量数据,则使用HQL。
发布于 2011-01-13 18:23:56
对于动态查询,我更喜欢使用条件查询。例如,根据某些参数动态添加一些排序或省略某些部分(例如限制)要容易得多。
另一方面,我将HQL用于静态和复杂的查询,因为它更容易理解/阅读HQL。另外,我认为HQL的功能更强大一些,例如,对于不同的连接类型。
发布于 2016-11-05 16:34:07
你是对的,也是错的。使用org.hibernate.loader.Loader
类从数据库或缓存中检索结果列表。如果未启用缓存,则使用在SessionFactoryImp中创建的方言对象构建预准备语句。因此,每次列表调用都会初始化语句。此外,低级查询是自动生成的。基本上,它是一种辅助工具,但在某些情况下,特定的查询在手动编写时会更有效。
https://stackoverflow.com/questions/4401240
复制相似问题