【发布时间】:2018-04-05 16:02:06
【问题描述】:
表中有超过 10,00,000 条记录,我正在处理。我需要为每条记录执行异步操作(推送队列)。一次获取所有记录并循环处理每条记录感觉是个坏主意。相反,我想分批获取记录并遍历每个批次。在互联网上某处阅读有关使用 setFetchSize(int n) 批量查询的信息,我的 DAO 如下所示:
public List<UserPreferenceDTO> getUserPreferences() {
String sqlQueryString = "select us.id as userId, pf.id as preferenceId from users us, preferences pf where us.id = pf.user_id;";
SQLQuery sqlQuery = (SQLQuery) session.createSQLQuery(sqlQueryString).setFetchSize(200);
return sqlQuery.addScalar("userId").addScalar("preferenceId").setResultTransformer(new AliasToBeanResultTransformer(UserPreferenceDTO.class)).list();
}
我的服务类看起来像:
List<UserPreferenceDTO> userPreferenceDTOs = userDeviceDao.getUserPreferences();
for(UserPreferenceDTO userPreferenceDTO: userPreferenceDTOs ){
pushToRabbitMQ(userPreferenceDTO);
}
我需要从数据库中获取“N”条记录将它们推送到队列中进行处理,然后再获取另外“N”条记录将它们推送到队列中,依此类推,直到所有记录都推送到队列中。
【问题讨论】:
标签: java postgresql hibernate