Katakanlah saya memiliki tabel dengan jutaan baris. Menggunakan JPA, apa cara yang tepat untuk mengulangi kueri terhadap tabel itu, sehingga saya tidak memiliki semua Daftar dalam memori dengan jutaan objek?
Misalnya, saya menduga bahwa hal berikut akan meledak jika mejanya besar:
List<Model> models = entityManager().createQuery("from Model m", Model.class).getResultList();
for (Model model : models)
{
System.out.println(model.getId());
}
Apakah pagination (perulangan dan pembaruan setFirstResult()
/ secara manual setMaxResult()
) benar-benar solusi terbaik?
Sunting : kasus penggunaan utama yang saya targetkan adalah jenis pekerjaan batch. Tidak masalah jika butuh waktu lama untuk menjalankannya. Tidak ada klien web yang terlibat; Saya hanya perlu "melakukan sesuatu" untuk setiap baris, satu (atau beberapa N kecil) pada satu waktu. Saya hanya mencoba untuk menghindari semuanya dalam memori pada saat yang bersamaan.