快速获得hibernate结果的方法?

时间:2011-02-18 22:49:08

标签: java oracle 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);

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

3 个答案:

答案 0 :(得分:5)

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

Hibernate最多为每一行创建一些Object的实例,或者更糟的是,为每行创建多个Object个实例。 Hibernate有一些非常简并的代码生成和实例化行为很难控制,特别是对于大型数据集,如果你启用了任何缓存选项,那就更糟了。

Hibernate不适合大型结果集,并且处理数十万行作为对象也不是非常注重性能。

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

答案 1 :(得分:5)

如果您需要提取数十万条记录,我不确定hibernate是否正确使用。查询执行时间可能低于20秒,但获取时间会很长并占用大量内存。获得所有这些记录后,如何输出它们?它的数据远远超出您向用户显示的数据。对于进行数据仓库式数据处理而言,Hibernate并不是一个很好的解决方案。

答案 2 :(得分:1)

您可能在MyObject类和映射中有多个对其他类的引用,您可以设置预先加载或类似的东西。使用您编写的代码很难找到问题,因为它没问题 使用Hibernate Profiler - http://hibernateprofiler.com/可能会更好。它将向您显示映射,配置和查询的所有问题。