Java dünyasında persistence alanında geliştirilmiş olan bir çok uygulama vardır.
Aklıma gelen ve popüler olanlar;
Hibernate, Eclipse-Link, TopLink, iBatis…
İsmi geçen bu kütüphanelerin hepsi persistence teknolojisi üzerine tasarlanmıştır. Hepsi gerçekten çok güçlü uygulamalardır. Ama benim tercihim su götürmez bir şekilde Hibernate’tir.
Java dünyasının doğası gereği, herhangi bir konu üzerinde bir çok farklı çalışma yapılır ve benzer işleri yapan inanılmaz sayıda ürün ortaya çıkar. Ortalıkta sanki bir karmaşa varmış gibi görünür ama öyle değildir. Aslında bu karmaşık ortamda en güçlü bileşenler ön plana çıkar, zayıf olanlar elenir ve arkasından ortaya bir spesifikasyon konularak, karmaşa tamamen ortadan kaldırılır. Mevcut konu tek çatı altında ve belirli standartlar çerçevesinde toplanmış olur. Kaos teorisini andıran bu süreç sonunda gerçekten çok güçlü yapılar ortaya çıkar.
İşte JPA teknolojisi de, böyle bir sürecin sonucudur.
Persistence konusunda bir çok kütüphane geliştirildi. Bunların bir kaç tanesi ön plana çıktı (biraz yukarda isimleri verilmiştir.) En sonunda da, bu ürünlerin hepsininin çalışmasını tek çatı altında toplayan JPA spesifikasyonu ortaya konuldu.
Her kütüphanenin kendine özgü fonksiyonları ve çalışma mantığı olmasına rağmen, Eğer bu ürünleri JPA başlığı altında kullanırsanız, Aynı fonksiyonları kullanarak istediğiniz kütüphaneyi kullanabilirsiniz.
Bunu daha da basit olarak açıklayacak olursak;
Persistence araçlarını sizlerin veritabanlarına nesne kaydetmenizi sağlayan araçlar olduğunu düşünün. hepsi de birbirinden farklı olan araçlar. Kullanımları da tamamen birbirinden farklı. Hepsinin nasıl kullanıldığını öğrenmek son derece zor ve uğraştırıcı. İşte bu durumda ara kademeye hepsini nasıl kullanabileceğini bilen bir eleman alıyorsunuz. Siz sadece bu elemana git şu aracı kullanarak şu veritabanına şu veriyi kaydet diyorsunuz, o da gidip yapıyor. Geri kalanı da sizi ilgilendirmiyor.
İşte işlerinizi bu türlü kolaylaştıran bu elemanın adı JPA. JPA bir persistence uygulaması değildir. JPA persistence uygulamalarını yöneten, bir spesifikasyondur.