快速获得hibernate结果的方法?

Jos*_*eph 4 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);
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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

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

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

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


JOT*_*OTN 5

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