JPA(Java Persistance API) Nedir ? Ne işe yarar ?
Hemen birkaç madde ile özetleyelim:
JPA(Java Persistance API) Nedir ? Ne işe yarar ?
Hemen birkaç madde ile özetleyelim:
- Java nesnelerinin (entity sınıflarının) ilişkisel veritabanlarında kalıcı (persist) hale getirilmesini, yönetilmesini ve sorgulanmasını tanımlar.
- JPA (Java Persistence API), Java dünyasında ORM için ortak bir standarttır.
- Yani JPA aslında bir arayüz (interface) / kurallar bütünüdür. Tek başına çalışmaz. Yalnızca arayüzler, anotasyonlar ve kurallar tanımlar. Bu kuralları hayata geçiren (implement eden) kütüphaneler vardır; işte bunlara ORM araçları diyoruz.
*{ORM hakkında daha fazla bilgi edinmek için tıkla.}*
JPA’nın Anahtar Özellikleri
- Veri Bütünlüğü: Veritabanında verilerin doğru ve tutarlı olmasını sağlar.
- Doğrudan Eşlemeye İzin Verir: Java sınıflarını ve alanlarını doğrudan veritabanı tablolarına ve sütunlarına eşler.
- Taşınabilir: Kodu değiştirmeden farklı veritabanlarında çalışır.
- Üretkenliği Artırır: Boilerplate kodları azaltır ve veritabanı işlemlerini basitleştirir.
- Uygulanması Kolay: CRUD işlemleri ve sorguları için standart ve basit bir API sağlar.
JPA’nın Temel Bileşenleri ve Mimarisi

Entity
- Entity, JPA’da veritabanındaki bir tabloya karşılık gelen kalıcı Java sınıfıdır.
- Entity sınıfları
@Entityanotasyonu ile işaretlenir. - Her entity’nin mutlaka bir primary key alanı olmalıdır. [
@Id]
Örnek:
@Entity
public class Customer {
@Id
private Long id;
private String name;
}
// Bu sınıf, CUSTOMER tablosuna denk gelir.
EntityManagerFactory
- EntityManagerFactory, EntityManager instance’ları için bir fabrikadır. createEntityManager() metodu, yeni bir EntityManager instance’ı oluşturur.
EntityManager
- Persistence Context ile etkileşim kurmak için kullanılan temel arayüzdür.
- EntityManager, JPA’da entity nesnelerinin yaşam döngüsünü yöneten ana arabirimdir.
- Veritabanı üzerinde CRUD işlemleri (persist, merge, remove, find) yapmak için kullanılır.
EntityManagerFactorytarafından oluşturulur.
Persistence Context
- EntityManager’ın yönettiği bellek alanıdır (Entity Instances kümesi).
- İçinde “Managed” durumda olan entity nesneleri tutulur. Yani Entity’lerin yaşam döngüsünü yönetir ve bunlarda yapılan değişiklikleri izler.
👉 Entity’nin hangi durumda (Transient, Persistent, Detached, Removed) olduğunu asıl belirleyen Persistence Contexttir.
- Bir nevi ilk seviye önbellek (first-level cache) gibi çalışır. Yani örneğin aynı transaction içinde aynı id ile iki kez
find()yaparsan, DB’ye tekrar gitmez → Persistence Context’ten getirir.
Not: Persistence Context, Entity’lerin veritabanıyla senkronize edilmesini ve managed, detached ve removed gibi varlık durumlarının (Entity States) yönetilmesini sağlar.
Not2: Entity yaşam döngüsünü yazının en sonunda anlatacağım.
Criteria API
- JPA uygulamasının Entity’ler ve bunların persistent state’leri için sorguları tanımlamak amacıyla kullanılan programatik olarak tanımlanmış tür güvenli sorgu API’sidir.
Not: JPQL’in statik olmasının aksine, sorgunun yapısı çalışma zamanına kadar bilinmediği yerde dinamik sorgular oluşturmak için platform sağlar.
JPQL (Java Persistence Query Language)
- JPQL, JPA’nın nesne odaklı sorgulama dilidir.
- SQL’e benzer, ancak tablo ve sütun yerine entity sınıflarını ve alanlarını kullanır.
Örnek:
List<Customer> customers = em.createQuery(
"SELECT c FROM Customer c WHERE c.name = :name", Customer.class)
.setParameter("name", "Ali")
.getResultList();
Persistence Unit
- Persistence Unit, JPA uygulamasının hangi veritabanıyla, hangi entity sınıfları üzerinden, hangi ayarlarla çalışacağını tanımlayan yapılandırma birimidir.
persistence.xmldosyasında tanımlanır.
Örnek:
<persistence-unit name="myPU">
<class>com.example.Customer</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/testdb"/>
<property name="javax.persistence.jdbc.user" value="postgres"/>
</properties>
</persistence-unit>
Entity Lifecycle (Entity’nin Yaşam Döngüsü)
JPA’da bir entity nesnesi, uygulama süresince farklı yaşam döngüsü evrelerinden geçer:
- New (Transient)
- Nesne
newile oluşturulur ama henüz EntityManager tarafından yönetilmez. - Veritabanıyla ilişkisi yoktur.
2. Managed (Persistent)
EntityManager.persist(entity)çağrıldığında nesne artık yönetilmeye başlanır.- Değişiklikler otomatik olarak veritabanına yansıtılır (transaction commit edildiğinde).
3. Detached
- EntityManager kapatıldığında veya entity
detach()edildiğinde nesne yönetimden çıkar. - Artık veritabanı ile bağlantısı yoktur.
4. Removed
EntityManager.remove(entity)çağrıldığında entity silinmeye işaretlenir.- Transaction commit edilince veritabanından da silinir.
Şematik olarak gösterecek olursak:
new (Transient)
|
persist()
↓
managed (Persistent)
| \
remove() detach()
↓ ↓
removed detached
Kapanış
Benim JPA hakkında bahsedeceklerim bu kadardı. Yazdıklarım genellikle kendime nottur. Umarım sana da faydalı olmuştur sevgili okur. Benimle iletişime geçmek istersen LinkedIn hesabım üzerinden erişebilirsin.
— — — — Kaynakça — — — —
- https://www.geeksforgeeks.org/java/jpa-architecture/
- https://www.geeksforgeeks.org/java/jpa-introduction/
- GhatGPT
- Kendi mesleki tecrübem
메타데이터
- post_id
- 1a9e77ab4534
- slug
- jpa-java-persistance-api-nedir-ne-işe-yarar-1a9e77ab4534
- url
- https://medium.com/@dincdev/jpa-java-persistance-api-nedir-ne-i%C5%9Fe-yarar-1a9e77ab4534
- canonical_url
- https://medium.com/@dincdev/jpa-java-persistance-api-nedir-ne-i%C5%9Fe-yarar-1a9e77ab4534
- author_url
- https://medium.com/@dincdev
- status
- ok
- fetched_at
- 2026-06-26 03:39:16