Saya melihat Spring, JPA bekerja di sekitar repositori (lapisan DAO: jika saya tidak salah). Jadi maksud saya bedanya menggunakan 'Spring JPA + Hibernate' atau hanya menggunakan 'Hibernate' secara langsung?
Seperti yang Anda katakan, JPA adalah spesifikasi sementara Hibernate adalah implementasi khusus dari spesifikasi itu (implementasi ini biasanya disebut sebagai Penyedia ). Dengan menggunakan Hibernate, Anda mengikat diri ke penyedia yang membatasi kebebasan Anda untuk beralih ke opsi lain bila diperlukan (misalnya, Anda ingin menggunakan EclipseLink atau ObjectDB sebagai gantinya karena Hibernate memiliki bug yang menghentikan proses pengembangan Anda).
Mengutip Musim Semi data JPA 's dokumentasi:
Menerapkan lapisan akses data suatu aplikasi cukup rumit untuk sementara waktu. Terlalu banyak kode boilerplate harus ditulis. Kelas domain bersifat anemia dan belum dirancang dengan berorientasi objek nyata atau domain driven.
Menggunakan kedua teknologi ini membuat hidup para pengembang jauh lebih mudah sehubungan dengan kegigihan model domain yang kaya. Namun demikian jumlah kode boilerplate untuk menerapkan repositori, terutama masih cukup tinggi. Jadi tujuan dari abstraksi repositori Spring Data adalah untuk mengurangi upaya untuk mengimplementasikan lapisan akses data untuk berbagai toko persistensi secara signifikan.
Singkatnya, ini di atas JPA menambahkan lapisan abstraksi lain, semacam mendefinisikan desain berbasis standar untuk mendukung Lapisan Persistensi dalam konteks Musim Semi. Antarmuka yang ditentukan (dikenal dengan Spring) menyediakan layanan yang ditangani kerangka kerja menggunakan JPA untuk melayani hasil. Anda mendefinisikan repositori dengan cara Spring dapat memindai proyek dan menemukannya:
<repositories base-package="com.acme.repositories" />
Dengan demikian, memungkinkan Anda untuk menggunakannya dalam konteks wadah atau di luarnya.
Sekarang apa sebenarnya Spring, JPA. Apakah Spring, JPA telah menambahkan beberapa fungsionalitas (Antarmuka) lebih dari JPA dan masih ditentukan saja atau juga penyedia JPA?
Spring Data JPA memberikan definisi untuk mengimplementasikan repositori yang didukung di bawah tenda dengan merujuk spesifikasi JPA, menggunakan penyedia yang Anda tentukan.