Apa perbedaan antara JPA dan Spring Data JPA?

144

Saya agak bingung tentang perbedaan antara Spring Data-JPA dan JPA. Saya tahu tentang JPA bahwa ini adalah spesifikasi untuk mempertahankan Java Objects ke database relasional menggunakan teknologi ORM yang populer.

Dengan kata lain, JPA menyediakan antarmuka dan teknologi ORM lainnya, mengimplementasikan antarmuka yang dikenal sebagai penyedia JPA misalnya Hibernate.

Sekarang, apa sebenarnya Spring Data JPA?

Apakah Spring Data JPA telah menambahkan beberapa fungsionalitas (Antarmuka) lebih dari JPA dan masih ditentukan saja atau juga penyedia JPA?

Saya melihat Spring Data JPA bekerja di sekitar repositori (lapisan DAO: jika saya tidak salah). Jadi, maksud saya, bagaimana bedanya menggunakan 'Spring Data JPA + Hibernate' atau hanya menggunakan pengarahan 'Hibernate'?

DHRUV BANSAL
sumber

Jawaban:

126

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.

Fritz
sumber
1
Bisakah saya memanggil Repositori kumpulan entitas yang dikelola Spring? Saya tidak tahu mengapa tetapi dukungan Spring JPA menggunakan repositori tampaknya sangat mirip dengan EntityManager EJB - apakah itu pemikiran yang benar atau apakah mereka benar-benar berbeda dalam tujuannya? Terima kasih sebelumnya. Mustafa.
Mustafa
1
@Mustafa Sebagian besar solusi memiliki kesamaan. Meskipun tujuannya mungkin sama, implementasinya berbeda karena antarmuka yang terlibat.
Fritz
35

Java Persistence API, kadang-kadang disebut sebagai JPA, adalah kerangka kerja Java yang mengelola data relasional dalam aplikasi menggunakan Platform Java, Edisi Standar (JavaSE) dan Platform Java, Edisi Perusahaan (JavaEE).

Ketekunan dalam konteks ini mencakup tiga bidang:

  • API itu sendiri, didefinisikan dalam javax.persistencepaket.

  • Bahasa Permintaan Persistensi Jawa (JPQL).

  • Metadata objek-relasional.

    masukkan deskripsi gambar di sini

Spring Data JPA adalah bagian dari proyek payung Data Spring yang membuatnya lebih mudah untuk mengimplementasikan repositori berbasis JPA.

Fitur:

  • Dukungan canggih untuk membangun repositori berdasarkan Spring dan JPA
  • Dukungan untuk predikat QueryDSL dan dengan demikian tipe JPA-safe queries
  • Audit transparan untuk kelas domain
  • Dukungan pagination, eksekusi query dinamis, kemampuan untuk mengintegrasikan kode akses data kustom
  • Validasi @Querypertanyaan beranotasi pada waktu bootstrap
  • Dukungan untuk pemetaan entitas berbasis XML
  • Konfigurasi repositori berbasis JavaConfig dengan memperkenalkan @EnableJpaRepositories

    masukkan deskripsi gambar di sini
Shreyos Adikari
sumber
3

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 DDDRepository atau DAO (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 @Transactionalanotasi .

Vlad Mihalcea
sumber