如何使用JPA(或至少使用Hibernate)处理大型数据集?
我需要让我的Web应用程序与非常大的数据集一起工作。目前,我得到的要么是OutOfMemoryException,要么是1-2分钟生成的输出。
让我们简单一点,假设我们在DB中有2个表:第一个表中大约有1000行,第二个表中有10 000 000行。后一个表有几个字段,包括“workerId”和“hoursworked”字段等。我们需要的是:Worker
WorkLog
计算每个用户的总工作时数;
每个用户的工作周期列表。
对于纯 SQL 中的每个任务,最直接的方法 (IMO) 是:
1)
select Worker.name, sum(hoursWorked) from Worker, WorkLog
where Worker.id = WorkLog.workerId
group by Worker.name;
//results of this query should be transformed to Multimap<Worker, Long>
2)
select Worker.name, WorkLog.start, WorkLog.hoursWorked from Worker, WorkLog
where Worker.id = WorkLog.workerId;
//results of this query should be transformed to Multimap<Worker, Period>
//if it was JDBC then it would be vitally
//to set resultSet.setFetchSize (someSmallNumber), ~100
所以,我有两个问题:
- 如何使用JPA(或至少使用Hibernate)实现我的每种方法;
- 你会如何处理这个问题(当然是JPA或Hibernate)?