我遇到问题,因为我在一个表中有数百万个域对象。几分钟后我尝试使用Domain.findAllBy()来获取所有对象时,我得到了OutOfMemoryError ..我想知道是否有一种有效的方法来加载所有这些对象而不会再次出现此错误?
我应该分页结果并只加载必需品吗?
如果我做错了,请告诉我。
感谢您的帮助和新年快乐;)
答案 0 :(得分:3)
真正的解决方案是不要尝试一次性检索所有域对象进入内存。无论您购买多少内存,都无法保证域对象的增长速度不会超过RAM。
接下来,即使您可以将所有对象存储在内存中,也需要花费很多时间来检索所有对象。您希望对对象执行的任何操作 - 修改属性,调用方法 - 都需要更长时间。
我无法想象一个人类用户希望在网页上看到数百万个业务对象的场景 - 即使通过它们进行分页也没有意义。
因此,如果要检索要修改它们的对象,请在数据库中执行此操作。如果要检索它们以在业务对象上运行方法,请使用分页,或者考虑是否可以将该方法实现为数据库调用。如果您要检索它们以进行显示,则需要允许用户过滤其请求并提供分页。