加快批处理的Hibernate.find()查询? (并减少内存使用量)

时间:2015-05-07 12:11:35

标签: java hibernate spring-batch batch-processing spring-orm

我们已经从java 1.4迁移到数据库视图的直接sql查询到java 8,域对象和带有hibernate的orm持久性。

我的批处理过程必须从数据库中读取300,000行,如下所示:

HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory);

List<?> list = hibernateTemplate.find("from Widgets widgets where widget.status=?", status);

然而这非常慢(9分钟,相比数据库查询为30秒)并消耗大量内存。

我打开了休眠show_sql,我可以看到它花了很多时间从3个不同的表加载域对象(Widget包含Wobjet和Wudget,让我们说)

由于我不需要整个list(我可以逐行进行批量处理),我想知道:

在休眠中是否存在某种类型的ResultSet更高效(更快)?

顺便提一下,我们使用的是spring批处理,后备数据库是Oracle(虽然可以改变)。

如果可能的话,使用HibernateTemplate更容易实现这一点,因为我们Dao层中的所有其他操作都使用相同的模板(尽管这是批量处理的第一个操作数据量。)

0 个答案:

没有答案