Hibernate ve jpa

Preview:

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.

Recommended