Apa perbedaan antara CrudRepository dan JpaRepository interface di musim semi data JPA ?
Ketika saya melihat contoh di web, saya melihat mereka di sana digunakan secara bergantian.
Apa perbedaan di antara mereka?
Mengapa Anda ingin menggunakan yang satu di atas yang lain?
java
spring
jpa
spring-data
spring-data-jpa
kseeker
sumber
sumber
Jawaban:
JpaRepository
meluasPagingAndSortingRepository
yang pada gilirannya meluasCrudRepository
.Fungsi utamanya adalah:
CrudRepository
terutama menyediakan fungsi CRUD.PagingAndSortingRepository
menyediakan metode untuk melakukan pagination dan menyortir catatan.JpaRepository
menyediakan beberapa metode terkait JPA seperti membilas konteks kegigihan dan menghapus catatan dalam satu batch.Karena warisan yang disebutkan di atas,
JpaRepository
akan memiliki semua fungsiCrudRepository
danPagingAndSortingRepository
. Jadi, jika Anda tidak memerlukan repositori untuk memiliki fungsi yang disediakan olehJpaRepository
danPagingAndSortingRepository
, gunakanCrudRepository
.sumber
Jawaban Ken pada dasarnya benar, tetapi saya ingin mengatakan "mengapa Anda ingin menggunakannya?" bagian dari pertanyaan Anda.
Dasar-dasar
Antarmuka dasar yang Anda pilih untuk repositori Anda memiliki dua tujuan utama. Pertama, Anda mengizinkan infrastruktur repositori Spring Data untuk menemukan antarmuka Anda dan memicu pembuatan proksi sehingga Anda menyuntikkan instance antarmuka ke klien. Tujuan kedua adalah untuk menarik sebanyak mungkin fungsionalitas yang diperlukan ke antarmuka tanpa harus mendeklarasikan metode tambahan.
Antarmuka umum
Pustaka inti Spring Data dikirimkan dengan dua antarmuka dasar yang memperlihatkan serangkaian fungsi khusus:
CrudRepository
- Metode CRUDPagingAndSortingRepository
- metode untuk pagination dan sorting (memanjangCrudRepository
)Antarmuka khusus toko
Modul-modul toko individual (misalnya untuk JPA atau MongoDB) memaparkan ekstensi khusus toko dari antarmuka dasar ini untuk memungkinkan akses ke fungsionalitas khusus toko seperti pembilasan atau pengumpulan khusus yang mempertimbangkan beberapa toko spesifik ke dalam akun. Contoh untuk ini adalah
deleteInBatch(…)
dariJpaRepository
yang berbeda daridelete(…)
karena menggunakan query untuk menghapus entitas yang diberikan yang lebih performant tapi datang dengan efek samping dari tidak memicu kaskade JPA-didefinisikan (sebagai mendefinisikan spec).Kami umumnya merekomendasikan untuk tidak menggunakan antarmuka dasar ini karena mereka mengekspos teknologi persistensi yang mendasari kepada klien dan dengan demikian mempererat sambungan antara mereka dan repositori. Plus, Anda mendapatkan sedikit dari definisi asli repositori yang pada dasarnya adalah "kumpulan entitas". Jadi jika Anda bisa, tetaplah bersama
PagingAndSortingRepository
.Antarmuka basis repositori kustom
Kelemahan dari secara langsung tergantung pada salah satu antarmuka dasar yang disediakan adalah dua kali lipat. Keduanya mungkin dianggap sebagai teori tetapi saya pikir mereka penting untuk diperhatikan:
Page
atauPageable
dalam kode Anda. Data Musim Semi tidak berbeda dari perpustakaan tujuan umum lainnya seperti commons-lang atau Guava. Asalkan memberikan manfaat yang masuk akal, tidak apa-apa.CrudRepository
, Anda mengekspos satu set lengkap metode kegigihan sekaligus. Ini mungkin baik-baik saja di sebagian besar keadaan juga, tetapi Anda mungkin mengalami situasi di mana Anda ingin mendapatkan kontrol yang lebih baik atas metode mengekspos, misalnya untuk membuatReadOnlyRepository
yang tidak termasuksave(…)
dandelete(…)
metodeCrudRepository
.Solusi untuk kedua kelemahan ini adalah membuat antarmuka repositori dasar Anda sendiri atau bahkan satu set. Dalam banyak aplikasi saya telah melihat sesuatu seperti ini:
Antarmuka repositori pertama adalah beberapa antarmuka basis tujuan umum yang sebenarnya hanya memperbaiki titik 1 tetapi juga mengikat tipe ID
Long
untuk konsistensi. Antarmuka kedua biasanya memiliki semuafind…(…)
metode yang disalinCrudRepository
danPagingAndSortingRepository
tetapi tidak mengekspos yang memanipulasi. Baca lebih lanjut tentang pendekatan itu dalam dokumentasi referensi .Ringkasan - tl; dr
Abstraksi repositori memungkinkan Anda untuk memilih repositori dasar yang sepenuhnya digerakkan oleh kebutuhan arsitektur dan fungsional Anda. Gunakan yang disediakan di luar kotak jika sesuai, buat antarmuka basis repositori Anda sendiri jika perlu. Jauhi antarmuka repositori khusus toko kecuali tidak dapat dihindari.
sumber
Ringkasan:
PagingAndSortingRepository meluas CrudRepository
JpaRepository memperluas PagingAndSortingRepository
The CrudRepository antarmuka menyediakan metode untuk operasi CRUD, sehingga memungkinkan Anda untuk membuat, membaca, memperbarui dan catatan delete tanpa harus menentukan metode Anda sendiri.
The PagingAndSortingRepository menyediakan metode tambahan untuk mengambil entitas menggunakan pagination dan penyortiran.
Akhirnya JpaRepository menambahkan beberapa fungsionalitas lain yang khusus untuk JPA.
sumber
Saya belajar Spring Data JPA. Ini mungkin membantu Anda:
sumber
Semua jawaban memberikan rincian yang cukup untuk pertanyaan itu. Namun, izinkan saya menambahkan sesuatu yang lebih.
Mengapa kami menggunakan Antarmuka ini:
Antarmuka yang melakukan apa:
Kapan harus menggunakan antarmuka mana:
Menurut http://jtuts.com/2014/08/26/difference-between-crudrepository-and-jparepository-in-spring-data-jpa/
Secara umum ide terbaik adalah menggunakan CrudRepository atau PagingAndSortingRepository tergantung pada apakah Anda perlu menyortir dan paging atau tidak.
The JpaRepository harus dihindari jika mungkin, karena hubungan Anda repositori untuk teknologi kegigihan JPA, dan dalam kebanyakan kasus Anda mungkin bahkan tidak akan menggunakan metode ekstra yang disediakan oleh itu.
sumber