Bagaimana cara kerja anotasi hubungan hibernasi (@OneToOne, @OneToMany, dll).

Katakanlah ada entitas Siswa yang memiliki hubungan satu ke banyak dengan entitas Subjek yang dimuat dengan lambat. Anotasi @OneToMany digunakan untuk menentukan hubungan. Saya ingin memahami cara kerja internal hibernasi tentang cara penanganan anotasi ini.


person java_geek    schedule 09.12.2013    source sumber
comment
Ini disebut open source karena suatu alasan yang Anda tahu :)   -  person fvu    schedule 09.12.2013
comment
Ini open source, tetapi saya perlu tahu kelas mana yang harus dicari. Apakah ada pemroses anotasi yang menangani ini? Katakanlah objek siswa terisi tetapi mata pelajarannya bukan karena pemuatan yang lambat; ketika saya menelepon student.getSubjects() apa yang sebenarnya terjadi. Itu yang ingin saya ketahui   -  person java_geek    schedule 09.12.2013
comment
Anotasi hanyalah penanda, keajaiban sebenarnya dilakukan dengan menenun alias manipulasi bytecode - setelah memuat kelas secara efektif ditulis ulang untuk menciptakan hal-hal seperti hubungan dan pemuatan lambat.   -  person fvu    schedule 09.12.2013
comment
@fvu : Saya ingin mengetahui beberapa detail dari proses itu. Itu sebabnya saya mengajukan pertanyaan itu. Apakah ada tautan yang dapat membantu saya?   -  person java_geek    schedule 09.12.2013


Jawaban (1)


Saat membuat instance Student dari data yang dibaca di database, Hibernate menginisialisasi koleksi subjects dengan instance implementasi Collection-nya sendiri (yang disebut PersistentCollection).

PersistentCollection ini tidak diinisialisasi pada awalnya, dan tidak berisi data apa pun. Pertama kali metode mana pun dari koleksi ini dipanggil, kueri SQL dijalankan untuk memuat semua mata pelajaran siswa, dan mata pelajaran tersebut kemudian disimpan dalam cache di dalam koleksi untuk semua pemanggilan metode berikutnya.

person JB Nizet    schedule 09.12.2013
comment
Saya punya pertanyaan lain. Bisakah Anda memberi tahu saya bagaimana hibernate mengetahui saat runtime bahwa koleksi perlu dimuat dengan lambat? Apakah itu memanipulasi bytecode pada waktu kompilasi atau apakah anotasi tersedia saat runtime? - person java_geek; 09.12.2013
comment
Ya, anotasi tersedia saat runtime. Ketika pabrik sesi dibuat, Hibernate menganalisis semua kelas entitas. - person JB Nizet; 09.12.2013
comment
Terima kasih atas tanggapannya - person java_geek; 10.12.2013