Upload
orcun-colak
View
961
Download
4
Embed Size (px)
DESCRIPTION
hibernate ve jpa kullanımı
Citation preview
Hibernate ve JPA (Java Persistance API)
JPA Nedir : Java EE 5 ile gelen standart persistance (verinin kalıcı hale gelmesi) API'sidir.
Faydası : Daha önceden mevcut olan diğer veri kalıcılığı sağlayan kütüphanelerin (Hibernate, Toplink,
JDO gibi) ortak bir tanım altında birleştirilmesi.
Daha önce her kütüphane kendi API'sini veriyordu ve birinden diğerine geçiş zorlaşıyordu.
Veri Kalıcılığı Katmanı
JPA Provider Seçimine Örnek
JPA 3 ana bölümden oluşmaktadır
1. JPA Sınıf Hiyerarşisi 2. JPQL (Java Persistance Query
Language) 3. Nesne Tablo ilişkisini gösteren mapping
meta datası
JPA'da Önemli Sınıfların Hiyerarşisi
Metadata ve JPQL
Hibernate ve JPA
Hibernate daha eski ve büyük.JPA bir çok yapıyı buradan almış
Peki Hibernate ve JPA Arasında Ne Fark Var ?
JPA'nın sadece bir standart olduğunu unutmayalım. Hibernate onu implement ediyor.
Dolayısıyla JPA = Hibernate gibi düşünülebilir ancak arada bazı küçük farklılıklar halen var.
Örnek 1 : HQL ve JPQL arasındaki farklar
Hibernate ile de bir sorgulama dili geliyor. İsmi Hibernate Query Language (HQL).
HQL ile JPQL arasında farklar var. Örneğin en büyük fark HQL ile “from Customer” denirken JPQL ile “select from Customer” demek gerekiyor.
Dolayısıyla HQL ve JPQL aynı anda kullanılamazlar!
Örnek 2 : Default Constructor Kullanımı
The JPA specification requires that all persistent classes have a no-arg constructor. This constructor may be public or protected.
All persistent classes must have a default constructor (which can be non-public) so that Hibernate can instantiate them using Constructor.newInstance(). It is recommended that you have a default constructor with at least package visibility for runtime proxy generation in Hibernate.
Nesne Yönelimli Programlamada Temel Kavramlar
1. Veri Soyutlama (data abstraction) 2. Çok biçimlilik (polymorphisim) 3. Kalıtım (inheritance) 4. İlişkiler/Bağlantılar (association)
Örnek
Nesne Yönelimli Programlama Sebebiyle Hibernate Taklalar
Atmak Zorundadır Veri Soyutlama sebebiyle Reflection
kullanılır İlişki/Bağlantılar sebebiyle byte code
instrumentation veya kendi içindeki persistant sınıfları kullanır
Kalıtım için de çözümü vardır
Reflection ile gizlenmiş verilere erişme
Herşey java.lang.reflect.AccessibleObject ile olur
Sınıflar Arası Bağlantılar (Association)
Tek Yönlü Bağlantılar Many-To-One ve One-To-One İçin Byte
Code Provider Kullanır
Diğer Bağlantılar İçin Kendi içindeki Sınıfları Kullanılır
PersistentArrayHolder, PersistentBag, PersistentElementHolder, PersistentIdentifierBag, PersistentIndexedElementHolder, PersistentList, PersistentMap, PersistentSet gibi.
Hibernate İle İki Kademe Önbellek (cache) gelir
Birincil önbellek session'a bağlıdır ve session kapatılınca kaybolur.
İkincil önbellek ise session factory nesnesine bağlıdır ve session factory kapatılınca kaybolur.