一尘不染

在休眠状态下获得结果的快速方法?

hibernate

我目前在我的项目中设置了hibernate模式。它适用于大多数情况。但是今天我需要查询返回一个表中的几十万行。它是表中总行的约2 /
3s。问题是查询大约需要7分钟。使用直接JDBC并执行我认为是相同的查询的过程,花费的时间少于20秒。因此,我认为自己做的事情完全错误。我将在下面列出一些代码。

DetachedCriteria criteria  =DetachedCriteria.forlass(MyObject.class);
criteria.add(Restrictions.eq("booleanFlag", false));
List<MyObject> list = getHibernateTemplate().findByCriteria(criteria);

有什么想法为什么会很慢和/或我可以做些什么来改变它?


阅读 238

收藏
2020-06-20

共1个答案

一尘不染

您可能已经回答了自己的问题,请使用直接JDBC。

Hibernate最多Object为每行创建一个实例,或者更糟的是为每行创建多个Object实例。Hibernate具有真正退化的代码生成和实例化行为,这些行为可能很难控制,尤其是对于大型数据集,如果启用了任何缓存选项,则更糟。

Hibernate不适用于大型结果集,并且 由于对象 也不是非常注重性能的,因此处理成千上万的行。

原始JDBC只是行列的原始类型。数量较少的数据量级。

2020-06-20