Anotasyonlar-1
(NotNull — NotBlank — NotEmpty — Nullable)
Bu anotasyonlar ORM(Object Relational Mapping) teknolojisinin ortaya çıkmasıyla kullanılmaya başlandığı için önce ORM kavramından kısaca bahsedelim. Nesne yönelimli programla ile birlikte yazılımların veri tabanı bağımlı olmasının önüne geçmek için ORM konsepti ortaya çıktı. ORM konsepti minvalinde Hibernate, EclipseLink, OpenJPA, TopLink vs. gibi ORM araçları geliştirilmiştir. ORM konsepti ile geliştirilen bu araçlar Nesne tabanlı programlama dilleri kullanılan yazılımlarda nesnelerin veri tabanındaki ilgili tablolarla ilişkisinde köprü görevini üstlenir. Böylece veri tabanındaki tablolarla nesnelerin eşleşmesi daha pratik şekilde ve veri tabanı bağımlı olmadan yapılması sağlanır.
Farklı ORM teknolojilerinde farklı şekillerde nesne ile veri tabanı tablosu arasındaki ilişkiyi kurmaya yarayacak anotasyon veya ifadeler vardır. Biz bu yazımızda HIBERNATE aracı ve nesne yönelimli programla dili olan JAVA üzerinden ilerleyeceğimiz için bu aracın özelliklerinden yola çıkarak bazı anotasyonların işlevlerini ve faydalarını göreceğiz.
NotNull:
Tanımlanan değişkenin null olamayacağını belirtir. Yani kendi değişken türüne göre bir değerinin olması şarttır. LocalDate ise herhangi bir tarih, Integer ise herhangi bir sayı vs gibi.
NotBlank:
String gibi karakter dizisi alan değişken tiplerine atanacak değerin null ve sadece boşluk karakterinden oluşmasına izin vermez. Boşluk karakteri null olmadığı için bu karakteri alabilen String gibi değişken tiplerinde NotBlank anotasyonu kullanmak daha faydalıdır. Eğer tanımlanan değişkenin sadece boşluk karakterini barındırması sorun olmayacaksa ve null olmasına izin verilmeyecekse NotNull kullanılabilir.
NotEmpty:
Genellik değişken tipi dizi olan (Array, Collection, Map vs) değişken tiplerinde kullanılır. Tanılamanan değişkene null veya boyutu(size) 0’dan büyük dizi(array) atanması gerektiğini söyler.
Nullable:
Nullable ise database düzeyinde bir değerin null olup olmayacağını belirtir. Nullable = false denirse veri tabanında ilgili kolona yazılacak verinin null olamayacağı belirtilmiş olur. Dolaylı olarak veri tabanına ulaşma olasılığı olduğu için mesela ekleme(insert) sorgusu vs gibi. Bu kontrol sayesinde o kolona null değer atanması engellenmiş olur.
NotNull, NotBlank, NotEmpty gibi anotasyonlar hibernate gibi ORM araçları sayesinde kod içindeki entity veya dto(model) düzeyinde kontroller yapar. Veri tabanı düzeyinde etki etmez. Yani veri tabanına gitmeden kontrolleri sağlar. Böylece null olmayacak bir değer eğer null olarak gönderilir ise ilgili entity veya dto(model) üzerindeki anotasyonlar sayesinde tespit edilir. Veri tabanına gidilip ekleme sorgusu çalıştırılmadan tespit yapılmış olur. Veri tabanına gitme maliyetinden kurtuluruz.
NOT: NotNull anotasyonunun kullanılması hibernate.validator.apply_to_ddl değerinin true olarak setlenmesi halinde bu anotasyonun kurallarının veri tabanı düzeyinde karşılık gelen kurallara dönüştürülmesini sağlayacaktır. Böylece veri tabanında ilgili kolonunda nullable değeri de false olarak verilecektir.