Her kurumsal uygulama, büyük miktarda veriyi saklayan ve onları kullanan veritabanı işlemlerini gerçekleştirir. Tüm mevcut depolama yönetimi (storage management) teknolojilerine rağmen uygulama geliştiricileri verimli veritabanı işlemleri için çok fazla uğraşırlar.Java geliştiricilerinin genellikle veritabanı işlemlerini gerçekleştirmek için çok fazla kod yazması gerekir ve ya veritabanıyla ilişkili özel çatı(framework) kullanırlar.Oysa JPA ile veritabanı ile etkileşim yükü önemli ölçüde azaltılır. JPA, ilişkisel model (veritabanı modeli) ile nesne modeli(Java nesnesi) arasında bir köprü oluşturur.
JPA,Oracle tarafından desteklenen,bir veritabanındaki büyük ölçüde veriyi kalıcı olarak depolayan sınıflar ve metotların bir koleksiyonudur. İlişkisel nesne yönetimi(veritabanı) için kod yazım yükünü azaltır. Bunu JPA Provider çatısı sağlar. Peki neden veritabanı ile nesne arasındaki çevirimler bu kadar uğraştırıcıdır? Öncelikli olarak veritabanında ki veriler tablo formatında tutulurken, nesneler birbirlerine bağlanmış grafik formatında gösterilir. Aşağıdaki nedenlerden dolayı bu iki tür arasında uyumsuzluklar oluşmaktadır.
- Granularity (Parçacıklı): Nesne modeli, ilişkisel modele göre daha parçacıklı bir yapıya sahiptir.
- Subtypes (Miras Yapısı): İlişkisel veritabanlarının tüm tipleri bunu desteklemez.
Yukarıdaki şekilde 3 katman bulunmaktadır. Presentation katmanı arayüz katmanıdır, kullanıcıya sunulanacak görsel yapılar bu katmanda bulunur. Business Logic katmanı ise Java sınıflarını, Entity’leri içinde barındırır. (Entity veritabanında bulunan tabloların, nesne sınıflarına karşılık gelir) JPA katmanı ise JPA Provider’a karşılık gelir. JPA Provider veritabanıyla etkileşimde olan, veritabanı modeliyle nesne modeli arasındaki dönüşümü sağlar. Bazı JPA Provider’lar: Hibernate, Eclipselink, Toplink, Spring Data JPA vs.
JPA – Architecture
JPA iş varlıklarını(business entities) ilişkisel varlık(relational entities) gibi depolayan bir kaynaktır. POJO sınıflarını varlık olarak tanımlamayı, ve bu varlıkların nasıl yönetileceğini gösterir. Aşağıdaki resim JPA’nın sınıf düzeyindeki mimarisini göstermektedir. JPA’nın çekirdek sınıf ve arayüzlerini (interface) göstermektedir.
EntityManagerFactory:EntityManager’ın fabrika sınıfıdır. Birden fazla EntityManager örneğini yaratır ve yönetir.
EntityManager:Nesneler üzerindeki kalıcılık (persistence) işlemlerini yöneten arayüzdür. Sorgular için bir fabrika gibi çalışır. Select,insert,update,delete gibi metotları bulunur.
Entity:Veritabanında bir kayıt gibi saklanan kalıcı nesnelerdir. Tipik olarak bir entity;ilişkisel veritabanındaki bir tabloyu gösterir. Her bir entity nesnesi ise tablodaki bir satıra karşılık gelir.
EntityTransaction: EntityManager ile bire-bir ilişkiye sahiptir. Her EntityManager için işlemler EntityTransaction sınıfı tarafından gerçekleştirilir.
Persistence: EntityManagerFactory arayüzünü elde etmek için statik metotları içeren sınıf.
Query:Kriterlere uygun ilişkisel nesneyi elde etmek için uygulanan arayüz.
Yukarıdaki sınıflar ve arayüzler ,veritabanına entityleri bir kayıt gibi kaydetmek(depolamak) için kullanılıyor.