Entity veritabanımız ile yazılımımız arasında ilişki kurmamızı sağlayan kalıcı nesneler olarak tanımlanabilir. Java da POJO sınıfları birer Entity’dir.
Java Persistence API, Entity üzerine kurulmuştur. Entityler veritabanına eklenebilir / silinebilir / güncellenebilir özelliktedirler.
Örnek : Öğrencilerimizi tuttuğumuz bir Öğrenci tablomuz var. Bu tabloya eklenen her öğrenci aslında bir Entitydir.
Java’da Entityleri tanımlayabilmemiz ve kullanabilmemiz için 2 seçenek vardır.
- XML
- Annotations (Annotations yardımıyla @Entity, @Id vb. gibi)
Bir sınıfın Entity sınıfı olabilmesi için şu kurallara mutlaka uymalıdır.
- @Entity annotationı ile sınıfın işaretlenmesi.
- Parametresi olmayan bir public yapılandırıcı(constructor) metodun oluşturulması.
- @Id annotationı ile ayırt edici bir alan belirlenmesi.
Entity’nin Özellikleri:
- Persistable(Kalıcılık): Kaydedilebilir ve ulaşılabilir olmalı.(public no-arg constructor, getter/setter metodları)
- Idetity(Kimlik) : Her Entity’nin bir unique(eşsiz) kimlik bilgisi olmalı.(Primary Key olarak ifade edilebilir)
- Transactionality(İşlem) : Veritabanına ekleme / silme / güncelleme bir transaction’dır. İşlem tam anlamıyla tamamlanmazsa rollback yapılmalı en başa dönülmelidir.
Transactionality kavramını biraz daha iyi anlamak için aklımıza uçak bileti örneğini getirelim.
- Güzel bir seyahat için uçuş rotamızı seçer(İstanbul->Paris), tarih bilgilerini girer(20/02/2018) ve o gün uygun olan uçuşları listeleriz.
- Sonrasında kendimize uygun olan uçuşu seçer, ardından koltuğumuzu belirleriz. Oturacağımız koltuk diğer kullanıcıların erişimine kilitlenir bu yer bizim için ayrılır.
- Ardından Kredi Kartımız ile ödeme işlemini gerçekleştiririz.
- Biletleme işlemimiz tamamlanmıştır. İyi uçuşlar 🙂
Bu adımların hepsine transaction(işlem) adı verilir. Bu işlemlerin hepsi başarılı bir şekilde tamamlanırsa biletleme işlemi gerçekleşir. Aksi durumlarda örneğin ödeme işleminde limitimizin yetmediği durumda ya da internet bağlantımızın kopması durumunda roll back yapılıp tüm işlemler geri alınır. Ödeme aşamasına gelene kadarki tüm başarılı işlemlerin hiç bir önemi kalmaz.
Transaction mantığı “Ya hep ya hiç” kuralını benimser.
Transaction işleminin oluşabilmesi için “ACID” denilen bir takım ilkelere uyması gerekir.
Atomicity → Tüm adımlar başarılı olmalıdır . (Ya hep, ya hiç)
Consistency → Tutarlılık anlamına gelmektedir. 1 bilet için ödeme yapıldıysa 1 bilet kesilmeli.
Isolation → Transaction gerçekleşirken aynı anda başka bir kullanıcı tarafından işleme izin verilmez, kilitleme yapılır. (Koltuk seçimi)
Durability → Tamamladığımız adımlar başarılı ise kaydedilmeli, eğer transaction içinde bir hata meydana gelirse sistem en başa dönmeli (rollback) işlemi yapılmalıdır.
Açıklama için teşekkürler sade ve anlaşılır olmuş
Teşekkür ederim 🙂