Perbedaan utama adalah apakah itu tertunda pemuatan.
Metode pemuatan tidak segera mengakses database, dan ketika catatan mencoba memuat tidak ada, metode pemuatan mengembalikan objek proxy yang tidak diinisialisasi.
Dapatkan metode
Selalu mengakses database segera. Ketika catatan berusaha memuat tidak ada, kembalikan nol secara langsung
Ada dua metode yang ditemukan di Hibernate yang sangat mirip. Setelah meninjaunya, saya menemukan
Ada dua metode yang sangat mirip dalam hibernate, get () dan load (). Keduanya dapat membaca data dari database melalui kelas entitas dan ID yang ditentukan dan mengembalikan instance yang sesuai. Namun, Hibernate tidak akan melakukan dua metode yang persis sama. Perbedaan di antara mereka adalah:
Dapatkan untuk meminta database secara langsung. Jika tidak dapat ditemukan, itu akan mengembalikan nol. Load pertama -tama akan dimuat dari memori. Jika belum dimuat atau diminta sebelumnya, maka permintaan database.
Perbedaan mendasar antara metode GET dan metode beban dalam hibernate adalah bahwa jika Anda menggunakan metode pemuatan, Hibernate percaya bahwa objek (catatan database) yang sesuai dengan ID harus ada dalam database, sehingga dapat digunakan dengan percaya diri, dan dapat menggunakan proxy untuk menunda pemuatan objek. Basis data hanya ditanya ketika data atribut lain dalam objek digunakan, tetapi jika catatan tidak ada dalam database, tidak ada cara, dan Anda hanya dapat melemparkan pengecualian. Metode beban melempar pengecualian berarti bahwa ketika menggunakan data objek, pengecualian dilemparkan ketika data tidak ada dalam database, daripada saat membuat objek ini. Karena cache dalam sesi adalah sumber yang sangat murah untuk hibernate, saat memuat, pertama -tama kita akan memeriksa cache sesi untuk melihat apakah objek yang sesuai dengan ID ada. Jika tidak ada, proxy akan dibuat. Jadi, jika Anda tahu bahwa ID harus memiliki catatan yang sesuai dalam database, Anda dapat menggunakan metode pemuatan untuk mencapai pemuatan malas. Untuk metode GET, Hibernate akan mengkonfirmasi apakah data yang sesuai dengan ID ada. Pertama, lihat di cache sesi, dan kemudian lihat di cache sekunder. Jika belum dilakukan, cari database, dan jika belum dilakukan dalam database, kembalikan nol.
2. Metode GET pertama kueri cache sesi, jika tidak, meminta cache sekunder, dan akhirnya meminta database; Sebaliknya, ketika metode pemuatan dibuat, cache sesi adalah kueri pertama, dan jika tidak ada agen yang dibuat, cache sekunder dan database hanya diminta ketika data sebenarnya digunakan.
Singkatnya, untuk perbedaan mendasar antara GET dan LOAD, dalam satu kata, Hibernate percaya bahwa data harus ada dalam database untuk metode beban, dan dapat menggunakan proxy untuk menunda pemuatan dengan kepercayaan diri. Jika masalah ditemukan saat digunakan, itu hanya dapat melempar pengecualian; Untuk metode GET, Hibernate harus mendapatkan data nyata, jika tidak, ia akan mengembalikan NULL.
1. Jika tidak ada catatan yang memenuhi kriteria ditemukan, metode get () akan mengembalikan nol. Dan muat () akan melaporkan ObjectNotFoundEcception.
2. Metode Load () dapat mengembalikan instance kelas proxy entitas, sedangkan get () akan selalu mengembalikan hanya kelas entitas.
3. Metode Load () dapat memanfaatkan sepenuhnya data yang ada di cache sekunder dan cache internal, sedangkan metode get () hanya mencari di cache internal. Jika tidak ada data yang sesuai ditemukan, cache sekunder akan dilewati dan SQL akan secara langsung dipanggil untuk menyelesaikan pencarian.