JPA (Java Persistence API) nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
JPA, Java uygulamalarında veri kalıcılığını yönetmek için API spesifikasyonudur. Java nesnelerinin ilişkisel veritabanlarına (veya diğer depolama alanlarına) haritalanması ve tersinin yapılması için standart bir yöntem sağlar. JPA, Java EE platformunun (şimdi Jakarta EE) bir parçasıdır ve bağımsız uygulamalarda da kullanılabilir.
JPA'nın temel bileşenleri:
- Entity:
@Entityanotasyonu ile işaretlenmiş, veritabanındaki verileri temsil eden normal Java sınıfları (POJO). - EntityManager: Kalıcılık bağlamıyla etkileşim için arayüz. Varlıkları bulmak, oluşturmak, güncellemek ve silmek için kullanılır.
- Persistence Context:
EntityManagertarafından yönetilen varlıkların kümesi. Varlıklar üzerinde yapılan değişiklikler burada izlenir ve veritabanıyla senkronize edilmeden önce takip edilir. - JPQL (Java Persistence Query Language): SQL'e benzer, nesne odaklı sorgu dili, tablolar ve sütunlar yerine varlıklar ve ilişkileri ile çalışır.
- Criteria API: Dinamik sorgular yapmak için nesne odaklı API.
persistence.xml: Kalıcılık birimlerini ve özelliklerini tanımlayan yapılandırma dosyası (örneğin, veritabanı bağlantı bilgileri, eşleme stratejileri).
JPA, belirli bir ORM (Object-Relational Mapping) uygulaması değil, sadece sözleşmeleri ve API'yi tanımlar. Bu spesifikasyonu uygulayan çeşitli JPA sağlayıcıları vardır, en popüler olanlar:
- Hibernate
- EclipseLink
- Apache OpenJPA
Varlık tanımlama örneği:
// `products` tablosundaki kaydı temsil eden varlık
@Entity
// Veritabanındaki tablo adı
@Table(name = "products")
public class Product {
// Birincil anahtar
@Id
// Birincil anahtarın oluşturulma stratejisi
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// `name` sütunu
private String name;
// `price` sütunu
private BigDecimal price;
// Yapıcılar, getter ve setterlar
// ...
}
EntityManager kullanım örneği:
// EntityManagerFactory'den EntityManager alınması
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
EntityManager em = emf.createEntityManager();
try {
// İşlem başlangıcı
em.getTransaction().begin();
// Yeni varlık oluşturma
Product newProduct = new Product();
newProduct.setName("Laptop");
newProduct.setPrice(new BigDecimal("1200.00"));
// Varlığı veritabanına kaydetme
em.persist(newProduct);
// Birincil anahtar ile varlık arama
Product foundProduct = em.find(Product.class, 1L);
System.out.println("Bulunan ürün: " + foundProduct.getName());
// JPQL sorgusu yürütme
List<Product> allProducts = em.createQuery("SELECT p FROM Product p", Product.class).getResultList();
for (Product p : allProducts) {
System.out.println(p.getName());
}
// İşlemi onayla
em.getTransaction().commit();
} catch (Exception e) {
// Hata durumunda işlemi geri al
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
e.printStackTrace();
} finally {
// EntityManager kapatma
em.close();
// EntityManagerFactory kapatma
emf.close();
}
JPA'nın temel amacı, JDBC ve SQL ile çalışma detaylarını soyutlayarak, nesne odaklı bir kalıcılık yaklaşımı sağlayarak, veritabanlarıyla çalışan uygulamaların geliştirilmesini kolaylaştırmaktır. Bu, kodun taşınabilirliğini artırır ve belirli bir veritabanına olan bağımlılığı azaltır.