← Back to list

JPA(Java Persistance API) Nedir ? Ne işe yarar ?

Hemen birkaç madde ile özetleyelim:

Emre Dinç · 2025-09-06 23:02 · 4 claps · 2.6 min read
#persistence-context #entitymanager #jpql #jpa #criteria-api
Open on Medium ↗
Wiki topics: 🔧 · Data Engineering

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ı @Entity anotasyonu 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.
  • EntityManagerFactory tarafı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.xml dosyası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:

  1. New (Transient)
  • Nesne new ile 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 — — — —


메타데이터
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