我目前在我的项目中设置了hibernate模式。它适用于大多数情况。但是今天我需要查询返回一个表中的几十万行。它是表中总行的约2 / 3s。问题是查询大约需要7分钟。使用直接JDBC并执行我认为是相同的查询的过程,花费的时间少于20秒。因此,我认为自己做的事情完全错误。我将在下面列出一些代码。
DetachedCriteria criteria =DetachedCriteria.forlass(MyObject.class); criteria.add(Restrictions.eq("booleanFlag", false)); List<MyObject> list = getHibernateTemplate().findByCriteria(criteria);
有什么想法为什么会很慢和/或我可以做些什么来改变它?
您可能已经回答了自己的问题,请使用直接JDBC。
Hibernate最多Object为每行创建一个实例,或者更糟的是为每行创建多个Object实例。Hibernate具有真正退化的代码生成和实例化行为,这些行为可能很难控制,尤其是对于大型数据集,如果启用了任何缓存选项,则更糟。
Object
Hibernate不适用于大型结果集,并且 由于对象 也不是非常注重性能的,因此处理成千上万的行。
原始JDBC只是行列的原始类型。数量较少的数据量级。