Memahami Pengecualian "Gagal Memulakan Koleksi" dalam Hibernate
Dalam konteks Hibernate, "gagal memulakan koleksi dengan malas " pengecualian berlaku apabila percubaan dibuat untuk mengakses harta koleksi entiti terpisah yang tidak diambil dengan betul semasa pertanyaan asal. Ralat ini biasanya ditemui apabila mengakses koleksi di luar skop sesi Hibernate, selalunya semasa pemprosesan paparan.
Untuk menyelesaikan isu ini, hubungan model antara Topik dan Ulasan perlu diperiksa. Koleksi komen dalam model Topik ditandakan sebagai dimulakan malas secara lalai. Ini bermakna koleksi tidak dimuatkan ke dalam memori apabila entiti Topik diambil daripada pangkalan data. Sebaliknya, ia hanya dimuatkan apabila koleksi sebenarnya diakses.
Memandangkan koleksi dimulakan secara malas, ia tidak boleh diakses setelah entiti Topik dialihkan daripada sesi Hibernate. Dalam senario khusus ini, entiti Topik dipisahkan apabila aliran kawalan beralih daripada pengawal (TopicController) ke paparan JSP (/topic/details), yang membawa kepada pengecualian.
Untuk membetulkan ralat, komen koleksi boleh diambil dengan penuh semangat semasa pertanyaan. Ini boleh dicapai dengan menukar jenis pengambilan daripada LAZY kepada EAGER dalam anotasi @OneToMany:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL) private Collection<Comment> comments = new LinkedHashSet<Comment>();
Dengan menetapkan jenis pengambilan kepada EAGER, koleksi akan segera dimuatkan ke dalam ingatan apabila entiti Topik diambil semula daripada pangkalan data, memastikan ia tersedia untuk akses pada setiap masa, walaupun di luar sesi Hibernate.
Atas ialah kandungan terperinci Mengapa Hibernate Melemparkan Pengecualian \'Gagal Memulakan Koleksi\' Secara Malas, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!