Rumah > Java > javaTutorial > Mengapa Hibernate Melemparkan Pengecualian \'Gagal Memulakan Koleksi\' Secara Malas, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Hibernate Melemparkan Pengecualian \'Gagal Memulakan Koleksi\' Secara Malas, dan Bagaimana Saya Boleh Membetulkannya?

Barbara Streisand
Lepaskan: 2024-12-02 22:16:11
asal
532 orang telah melayarinya

Why Does Hibernate Throw a

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>();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan