JPA ve Spring Data JPA arasındaki fark nedir?


144

Spring Data-JPA ve JPA arasındaki fark hakkında biraz kafam karıştı. JPA hakkında popüler ORM teknolojisini kullanarak ilişkisel bir veritabanına Java Nesneleri ısrar için bir özellik olduğunu biliyorum.

Başka bir deyişle, JPA arayüzler ve diğer ORM teknolojileri sağlar, JPA sağlayıcısı olarak bilinen arayüzleri uygular, örneğin Hibernate.

Şimdi, Spring Data JPA tam olarak nedir?

Spring Data JPA, JPA üzerinde biraz daha işlevsellik (Arayüzler) ekledi mi ve hala sadece belirtilmiş mi yoksa bir JPA sağlayıcısı mı?

Spring Data JPA'nın depolar etrafında çalıştığını gördüm (DAO katmanı: eğer yanlış değilsem). Yani, 'Bahar Verileri JPA + Hazırda Bekletme' veya sadece 'Hazırda Bekletme' yönlendirme kullanarak nasıl farklıdır?

Yanıtlar:


126

Spring'i gördüm, JPA depolar etrafında çalışıyor (DAO katmanı: eğer yanlış değilsem). Yani 'Bahar JPA + Hazırda Bekletme' veya sadece 'Hazırda Bekletme' kullanarak doğrudan nasıl farklı?

Söylediğiniz gibi, JPA bir belirtimdir , Hazırda Bekletme bu belirtimin belirli bir uygulamasıdır (bu uygulamalar genellikle Sağlayıcılar olarak adlandırılır ). Hazırda Beklet'i kullanarak, gerektiğinde başka bir seçeneğe geçme özgürlüğünüzü kısıtlayan kendinizi bu sağlayıcıya bağlarsınız (örneğin, Hazırda Bekletme'nin geliştirme işleminizi durduran bir hata olduğu için EclipseLink veya ObjectDB'yi kullanmak istersiniz).

Teklif Yay Verileri JPA bireyin belgeler:

Bir uygulamanın veri erişim katmanını uygulamak bir süredir zahmetlidir. Çok fazla kaynak plakası yazılması gerekiyordu. Alan sınıfları anemiktir ve gerçek bir nesne yönelimli veya alan güdümlü bir şekilde tasarlanmamıştır.

Bu teknolojilerin her ikisini de kullanmak, zengin alan adı modelinin kalıcılığı konusunda geliştiricilerin hayatını çok daha kolay hale getirir. Bununla birlikte, depoları uygulamak için boyler plakası kodu miktarı, özellikle hala oldukça yüksektir. Bu nedenle, Bahar Verileri'nin depo soyutlamasının amacı, çeşitli kalıcılık depoları için veri erişim katmanlarını uygulama çabasını önemli ölçüde azaltmaktır.

Özetle, JPA'nın üstünde, bir Bahar bağlamında Kalıcı Katman'ı desteklemek için standart tabanlı bir tasarım tanımlayan başka bir soyutlama katmanı ekleniyor . Bu tanımlı arabirimler (Spring tarafından bilinir), sonuçlara hizmet etmek için çerçevenin JPA kullanarak işlediği hizmetleri sağlar. Bir havuzu Spring'in projeyi tarayabilecek ve bulabileceği şekilde tanımlarsınız:

<repositories base-package="com.acme.repositories" />

Böylece, bir konteyner bağlamında veya dışında kullanmanıza izin verir.

Bahar, JPA tam olarak nedir. Bahar, JPA JPA üzerinde biraz daha işlevsellik (Arayüzler) ekledi ve hala sadece belirtildi mi yoksa bir JPA sağlayıcısı mı?

Yay Verileri JPA, tanımladığınız sağlayıcıyı kullanarak JPA spesifikasyonuna başvurarak başlık altında desteklenen depoları uygulamak için bir tanım sağlar.


1
Depo'yu Spring'in yönettiği bir varlık koleksiyonu olarak adlandırabilir miyim? Nedenini bilmiyorum ama depoları kullanan Bahar JPA desteği EJB'nin EntityManager'ına çok benziyor - doğru düşünme mi yoksa amaçlarında tamamen farklı mı? Şimdiden teşekkürler. Mustafa.
Mustafa

1
@Mustafa Çoğu çözümün ortak temeli vardır. Hedef aynı olsa da, ilgili arabirimler nedeniyle uygulama farklıdır.
Fritz

35

Java Kalıcılık API'sı, bazen JPA olarak da adlandırılır, Java Platform, Standard Edition (JavaSE) ve Java Platform, Enterprise Edition (JavaEE) kullanan uygulamalardaki ilişkisel verileri yöneten bir Java çerçevesidir.

Bu bağlamda sebat üç alanı kapsar:

  • javax.persistencePakette tanımlanan API'nin kendisi .

  • Java Kalıcılık Sorgu Dili (JPQL).

  • Nesne-İlişkisel meta veriler.

    resim açıklamasını buraya girin

Spring Data JPA, JPA tabanlı depoların uygulanmasını kolaylaştıran şemsiye Spring Data projesinin bir parçasıdır.

Özellikleri:

  • Bahar ve JPA temelli depolar oluşturmak için gelişmiş destek
  • QueryDSL desteği tahmin eder ve bu nedenle tür güvenli JPA sorguları
  • Alan adı sınıfının şeffaf denetimi
  • Sayfalama desteği, dinamik sorgu yürütme, özel veri erişim kodunu entegre etme yeteneği
  • @QueryAçıklamalı sorguların önyükleme zamanında doğrulanması
  • XML tabanlı varlık eşleme desteği
  • JavaConfig tabanlı depo yapılandırmasını tanıtarak @EnableJpaRepositories

    resim açıklamasını buraya girin

3

JPA

JPA, Java Nesnelerinin ilişkisel bir veritabanı sistemine eşlenme biçimini standartlaştıran bir belirtimdir. Sadece bir şartname olan JPA arayüzleri gibi bir dizi oluşur EntityManagerFactory, EntityManageryardım bir veritabanı tablosuna bir Java varlık nesnesi harita olduğunu ve ek açıklamalar.

Kullanabileceğiniz HIbernate, EclipseLink veya Open JPA gibi birkaç JPA sağlayıcısı vardır.

Bahar Verileri JPA

Yay Verileri JPA bir JPA veri erişim soyutlamasıdır. Tıpkı JPA gibi, Spring Data JPA da JPA sağlayıcısı olmadan çalışamaz.

Spring Data JPA, DDD Repositorymodeline veya çözümüne bir çözüm sunar DAO (Data Acess Object) pattern. Ayrıca yöntem adı kurallarıyla sizin adınıza JPA sorguları oluşturabilir.

Spring Data JPA, Hazırda Bekletme, Eclipse Link veya başka bir JPA sağlayıcısı ile çalışabilir. Bahar veya Java EE kullanmanın çok ilginç yararı olduğunu bildirimli kullanarak işlem sınırlarını kontrol edebilirsiniz @Transactionalek açıklama .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.