JPA ve Hibernate arasındaki fark nedir?

JPA 2'nin bir spesifikasyon olduğunu ve Hibernate'in ORM için bir araç olduğunu anlıyorum. Ayrıca, Hibernate'in JPA 2'den daha fazla özelliğe sahip olduğunu anlıyorum. Ancak pratik bir bakış açısından, gerçekten fark nedir?

iBatis kullanma deneyimim var ve şimdi Hibernate veya JPA2'yi öğrenmeye çalışıyorum. Pro JPA2 kitabını aldım ve sürekli "JPA provider"'a atıfta bulunuyor. Örneğin:

Eğer bir özelliğin standartlaştırılması gerektiğini düşünüyorsanız, sesinizi yükseltmelisiniz ve JPA sağlayıcınızdan talep edin

Bu kafamı karıştırıyor, bu yüzden birkaç sorum var:

  • Yalnızca JPA2 kullanarak, POJO'larıma açıklama ekleyerek DB'den veri alabilir miyim?
  • JPA2'nin TopLink veya Hibernate gibi bir "JPA Provider" ile mi kullanılması gerekiyor? Eğer öyleyse, JPA2 + Hibernate kullanmanın tek başına JPA2'ye kıyasla veya tek başına Hibernate'e kıyasla faydası nedir?
  • İyi bir pratik JPA2 kitabı önerebilir misiniz? "Pro JPA2" daha çok JPA2 üzerine bir İncil ve referans gibi görünüyor (Kitabın sonraki yarısına kadar Sorgulara girmiyor). JPA2'ye problem/çözüm yaklaşımı getiren bir kitap var mı?

Sizin de belirttiğiniz gibi JPA sadece bir spesifikasyondur, yani bir uygulaması yoktur. Sınıflarınıza JPA ek açıklamaları ile istediğiniz kadar açıklama ekleyebilirsiniz, ancak bir uygulama olmadan hiçbir şey olmayacaktır. JPA'yı uyulması gereken kurallar veya bir arayüz olarak düşünün, Hibernate'in JPA uygulaması ise JPA spesifikasyonu tarafından tanımlanan API'yi karşılayan ve kaputun altındaki işlevselliği sağlayan koddur.

Hibernate'i JPA ile kullandığınızda aslında Hibernate JPA uygulamasını kullanmış olursunuz. Bunun faydası, Hibernate'in JPA uygulamasını JPA spesifikasyonunun başka bir uygulaması ile değiştirebilmenizdir. Doğrudan Hibernate kullandığınızda, uygulamaya kilitlenirsiniz çünkü diğer ORM'ler farklı yöntemler / yapılandırmalar ve ek açıklamalar kullanabilir, bu nedenle başka bir ORM'ye geçemezsiniz.

Daha ayrıntılı bir açıklama için blog girdimi okuyun.

Yorumlar (6)

Wiki]1'den.

Java Persistence API'sini oluşturmak için motivasyon

Birçok kurumsal Java geliştiricisi, entity bean'ler yerine açık kaynak çerçeveler veya Veri Erişim Nesneleri tarafından sağlanan hafif kalıcı nesneleri kullanır: entity bean'ler ve enterprise bean'ler çok ağır ve karmaşık olmakla ünlüydü ve bunları yalnızca Java EE uygulama sunucularında kullanmak mümkündü. Üçüncü taraf kalıcılık çerçevelerinin birçok özelliği Java Kalıcılık API'sine dahil edildi ve 2006 yılı itibariyle Hibernate (sürüm 3.2) ve Open-Source Version TopLink Essentials gibi projeler Java Kalıcılık API'sinin uygulamaları haline geldi.

JCP sayfasında]2 belirtildiği gibi Eclipse bağlantısı JPA için Referans Uygulamadır. Bu konuda daha fazla bilgi için bu cevaba bakabilirsiniz.

JPA'nın kendisi standart bir ORM çerçevesini telafi edecek özelliklere sahiptir. JPA, Java EE spesifikasyonunun bir parçası olduğundan, JPA'yı bir projede tek başına kullanabilirsiniz ve herhangi bir Java EE uyumlu Sunucu ile çalışmalıdır. Evet, bu sunucular JPA spesifikasyonu için uygulamalara sahip olacaktır.

Hibernate en popüler ORM çerçevesidir, JPA tanıtıldıktan sonra hibernate JPA spesifikasyonlarına uygundur. Takip etmesi gereken temel spesifikasyon setinin yanı sıra hibernate pek çok ek şey sağlar.

Yorumlar (7)

JPA, ORM-API'lerini standartlaştırmaya yönelik bir spesifikasyondur. Hibernate, JPA uygulamasının bir satıcısıdır. Yani JPA'yı hibernate ile kullanırsanız, standart JPA API'sini kullanabilirsiniz, hibernate kaputun altında olacak ve standart olmayan bazı işlevler sunacaktır. Bkz. http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single/ ve http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/

Yorumlar (0)