我看到了一个面试问题,询问如果这个数据集太大而不适合内存,如何从db处理数据集。
答案是:使用流。
好的,听起来很合理。
但究竟应该在Java中使用什么工具来实现呢?
query.getResultList()
一次获取整个列表,并且Query API中没有任何流。
如果不是JPA,也许Hibernate本身就有它?
谢谢。
答案 0 :(得分:1)
您可以在查询中使用分页来一次选择集。然后,一旦完成处理该集合,返回数据库并获取下一组。您可以将此功能包装在List界面中,并使其对列表界面的用户透明
您还可以使用可以为您执行此操作的框架,例如ActiveJDBC
在ActiveJDBC lite中,您可以使用ModelListener
答案 1 :(得分:0)
java sql包和相关实现(对于oracle,mysql等)具有Statement和ResultSet类。后者将迭代所获取的记录,而不会立即将它们全部拉入内存。多个db命中是这种方法的副作用,尽管它们对开发人员是透明的。