Hibernate - @Immutable

Posted by dogukanhan on June 10, 2020 · 1 min read

Bir nesneyi oluşturduktan sonra değiştirmeyeceksek ve hep aynı kalıcaksa diğer bir deyim ile bu nesneye karşılık gelen kaydı update sorgusu kullanarak veritabanın güncelleme yapmacaksak @Immutable Annotation’ı kullanırız.

@Immutable Annotation sadece entity sınıflarında ve entity içerisinde yer alan Collection tanımlamalarında bulunabilir bunun dışında bir kullanımı yoktur.

Eğer bir entity sınıfı @Immutable Annotation’a sahipse bu sınıf için hibernate tarafından update sorgusu üretilmez ve eğer session üzerinden update methodu çağrılarak entity veritabanına update edilmek istenirse hiç bir işlem yapılmaz ve bir hata mesajı veya bir exception meydana gelmez.

Eğer bir collection @Immutable Annotation’a sahipse bu collection içerisinden elaman ekleme silme işlemleri yapılamaz.

@Immutable sadece update sorgusu etkilemektedir, bir sınıf bu Annotation’a sahip olsun veya olmasın delete işlemine tabi tutulabilir.

Hibernate cache’lerinde kullanılan dirty-checking mekanizması @Immutable etiketli sınıflarda uygulanmaz bu yüzden bu gerekli yerlerde kullanılması optimizasyon açısından önemlidir.

Örnek bir Immutable kullanımı

@Entity
@org.hibernate.annotations.Immutable
public class Student {

}