Welcome

JPA/Hibernate’de Flush ve Transaction

JPA/Hibernate ile ilgili en çok kafa karıştıran noktalardan birisi de flush işlemi ve bunun transaction ile olan ilişkisidir. Yakın bir zamanda konu ile ilgili aldığım bir soru üzerine önemli gördüğüm noktaları buradan sizinle paylaşmak istiyorum. Flush, Hibernate tarafında Session, JPA’da ise EntityManager üzerinden yönetilen PersistenceContext içerisinde mevcut entity’ler ile ilgili değişiklikleri (bu değişiklikler insert, update […]

Kotlin ve Hibernate Getter Level Access

JPA/Hibernate ile çalışırken PersistenceContext’in entity nesnelerin state’ine doğrudan field düzeyinde mi, yoksa getter metot ile mi erişeceğini @Id anotasyonunu nerede kullandığımız belirlemektedir. Eğer @Id anotasyonunu field üzerinde kullanırsak, JPA/Hibernate field level access stratejisini kullanacaktır, yani entity state’lerine erişmek ve veritabanından okuduğu değerleri entity nesnenin içerisine aktarmak için getter/setter metotlarını kullanmayıp, doğrudan Reflection API ile nesnenin […]

Kotlin ve Hibernate

Bir süredir Udemy’deki microservice çalışmalarımızda programlama dili olarak Kotlin’i kullanıyoruz. Hepinizin bildiği gibi Kotlin, Java üzerine geliştirilmiş JVM tabanlı bir programlama dili. Sunduğu iyileştirmeler ve değişiklikler büyük çapta “syntactic sugar” olarak nitelendirilebilir. IntelliJ IDEA ile birlikte (sanırım efektif olarak şu an sadece bu IDE ile çalışılabiliyor) kullanıldığında ve mevcut Java kütüphaneleri de Kotlin kodu içerisinde […]

Ayrı Bir Repository Katmanı Şart mı? (2)

Daha önceki bir yazımda ayrı bir repository katmanı şart mı? diye sormuş ve ORM teknolojilerinin ve JPA’nın popülerleşmesi ile CRUD tabanlı bir takım uygulamalarda yazılım geliştiricilerin ayrıca bir DAO/Repository arayüzü oluşturmanın çok da fazla işlevi olmadığını savunarak, doğrudan JPA EntityManager üzerinden servis katmanında veri erişim işlemleri gerçekleştirmeye yöneldiklerinden bahsetmiştim. Bu yazımda bu tür bir pratiğin […]

İlginç Bir Transaction Propagation Hikayesi 3

İlginç Bir Transaction Propagation Hikayesi başlıklı yazı dizisinin ikinci bölümünde Foo, Bar ve Baz entity’lerinden hiçbirinin mevcut durumda DB’ye insert edilemediğini söylemiştim. Ancak problemde hedeflenen Bar entity’sini persist eden ifadeyi try/catch bloğuna alarak, mümkünse Baz ve Foo entity’lerinin Bar’ın insert işleminden etkilenmeden DB’ye insert edilmesidir. Bar entity’si ile ilgili, DB’den gelen constraint violation hatası JPA PersistenceContext’in […]

Ayrı Bir Repository Katmanı Şart mı?

Kurumsal yazılım sistemlerinde üç katmanlı mimari yaklaşımı uygulamak “de facto” olmuştur. Bu tür uygulamalarda sunum (presentation), servis (service/business) ve depo (DAO/repository) ayrı ayrı görevlere sahip katmanlar olarak karşımıza çıkarlar. Sunum katmanında UI ile ilgili işlemler gerçekleştirilir. Bu katmanda kendi içinde arayüz (UI) ve dönüşüm/kontrol (controller) şeklinde alt katmanlara ayrılabilir. Dolayısı ile JavaEE dünyasında üç katmanlı […]

İlginç Bir Transaction Propagation Hikayesi 2

İlginç Bir Transaction Propagation Hikayesi isimli blog yazımızın ilk bölümünde Foo, Bar ve Baz entity’lerini insert eden FooService ve BarService bean’lerinin birbirlerini çağırırken, insert işlemlerini iki farklı transaction içerisinde yapmaya çalıştıklarından bahsetmiştik. Önce FooService.foo() metodu içerisinde Foo entity’si, ardından da BarService.bar() metodu içerisinde sıra ile Baz ve Bar entity’leri JPA EntityManager vasıtası ile persist ediliyorlardı. Bar […]

İlginç Bir Transaction Propagation Hikayesi

Aşağıdaki örnekte Foo, Bar ve Baz şeklinde üç basit entity sınıf görüyorsunuz. Foo ve Baz içerisinde PK dışında hiçbir property mevcut değilken, Bar sınıfında ise not null özelliğinde bir name property’si tanımlı. Ayrıca bu entity’leri persist eden FooService ve BarService servis bean sınıflarımız da var. @Entity public class Foo { @Id @GeneratedValue private Long id; […]

JPA/Hibernate Pratikleri ve Püf Noktaları

Yaklaşık 2004 yılından bu yana önce Hibernate sonra da JPA üzerinde çalışıyorum. O dönemden bu yana pek çok projenin geliştirilmesinde görev aldım, danışmanlık ve mentörlük yaptım. Yıllar önce Ted Neward, ORM teknolojilerini bilgisayar bilimlerinin Vietnam’ına benzetmişti ve bunda da çok haklıydı. Eğer genel olarak ORM çözümleri, özelde de JPA/Hibernate ile ilgili sağlam bir teorik bilgiye […]

Hibernate ve import.sql

Hibernate’in dokümante edilmemiş özelliklerden birisi de import.sql kabiliyetidir. Eğer root classpath’e import.sql isimli bir dosya eklerseniz ve bu dosya içerisine de SQL ifadeleri yazarsanız Hibernate şema export adımından sonra bu SQL ifadelerini çalıştıracaktır. Bu yöntem ile test veya development sırasında örnek verinin DB’ye eklenmesi mümkündür. import.sql kullanırken dikkat edilmesi gereken bir iki husus söz konusudur. […]