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.
Ketekunan dalam konteks ini mencakup tiga bidang:
API itu sendiri, didefinisikan dalam
javax.persistence
paket.Bahasa Permintaan Persistensi Jawa (JPQL).
Metadata objek-relasional.
Fitur:
@Query
pertanyaan beranotasi pada waktu bootstrap@EnableJpaRepositories
sumber
JPA
JPA adalah spesifikasi yang menstandarkan cara Java Objects dipetakan ke sistem basis data relasional. Menjadi hanya spesifikasi, JPA terdiri dari satu set interface, seperti
EntityManagerFactory
,EntityManager
, dan anotasi yang membantu Anda memetakan Java entitas objek ke tabel database.Ada beberapa penyedia JPA, seperti HIbernate, EclipseLink, atau Open JPA yang dapat Anda gunakan.
Spring Data JPA
Spring Data JPA adalah abstraksi akses data JPA. Sama seperti JPA, Spring Data JPA tidak dapat bekerja tanpa penyedia JPA.
Spring Data JPA menawarkan solusi untuk pola DDD
Repository
atauDAO (Data Acess Object) pattern
. Itu juga dapat menghasilkan permintaan JPA atas nama Anda melalui konvensi nama metode.Spring Data JPA dapat bekerja dengan Hibernate, Eclipse Link, atau penyedia JPA lainnya. Manfaat yang sangat menarik dari menggunakan Spring atau Java EE adalah bahwa Anda dapat mengontrol batas-batas transaksi secara deklaratif menggunakan
@Transactional
anotasi .sumber