Merhaba arkadaşlar. Bu yazı ile birlikte artık JPA kodlamaya ufaktan giriş yapıyoruz. Bu yazımızda JPA’nın en temel konusu olan Entity Tanımlaması‘nı ve hangi şartların gerekli olduğunu öğreneceğiz.
En temel hali ile veri tabanımızdaki tablolarımıza karşılık gelen Java sınıflarımız bizim Entity sınıflarımız oluyor. Tablolarımızdaki sütunlar da bu Entity sınıfları içindeki değişkenler ile ifade ediliyor. Bir sınıfın Entity sınıfı olması için olmazsa olmaz 3 kural vardır arkadaşlar. Bunlar:
- @Entity notasyonunun kullanılmış olması
- Argüman almayan bir public yapılandırıcı(constructor) metodun var olması
- @Id notasyonu kullanarak belirlenmiş bir ayırt edici alanın olmadır.
Ne demek istediğime şimdi bir de örnek kod ile bakalım arkadaşlar.
package jpa.pkg01; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class EntitySinifi implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String isim; public EntitySinifi() { } public EntitySinifi(Long id) { this.id=id; } public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } }
Kodda gördüğünüz gibi Entity sınıfımız @Entity notasyonuna sahip,argümansız bir yapılandırıcısı var ve ayırt edici alan olarak @Id notasyonuna sahip. id değişkenimiz bu sınıf içinde Long olarak yazılı fakat istersek onu int ya da String olarak da tanımlayabiliriz. Ayrıca dikkat ederseniz id değişkeni için get/set metotları da yer almamakta sınıf içinde. @Id ile tanımlanmış alanın değiştirilmez olduğu düşünüldüğü için değişkene ait get/set metotları sınıfımızda yer almıyor.
Şimdi Entity sınıfımıza ekleyebileceğimiz bazı diğer özelliklerden olan @Table ve @Column notasyonlarına bakalım.
package jpa.pkg01; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Column; @Entity @Table(name="BASVURULAR") public class EntitySinifi implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name="AdSoyad",length=50,nullable = false) private String isim; public EntitySinifi() { } public EntitySinifi(Long id) { this.id=id; } public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } }
Kod içerisinde bir önceki koddan farklı olarak @Table ve @Column notasyonlarını kullandık. @Table notasyonu ile sınıfımız ve veri tabanımızdaki tablomuzun adının aynı olması durumunu ortadan kaldırabiliriz. @Table(name=”BASVURULAR”) ifadesi ile EntitySinifi sınıfının veri tabanında BASVURULAR tablosu ile ilişkilendirildiğini söylüyoruz. @Column notasyonu ile de sütunun ve değişkenin aynı isimde olması durumunu ortadan kaldırıyoruz ve sütuna boş değer gidip gidemeyeceği ile en fazla kaç karakter girilebileceğini belirleyebiliyoruz.
Son olarak Fiziksel Notasyon ve Mantıksal Notasyon kavramlarını ve farkını öğrenelim. Yukarıdaki kodda göreceğiniz üzere @Entity,@Table,@Id ve @Column notasyonlarını kullandık. @GeneratedValue notasyonu @Id notasyonu ile ilişkili olduğu için onu saymadık.
Fiziksel notasyonlar veri tabanı yapılandırmasını sınıfa haritalayan notasyonlardır. Yani Fiziksel notasyonlar ile tablo adı,sütun adı tanımalama ve daha başka ayarlar yapmak mümkündür. Mantıksal notasyonlar ise veri tabanı ve sınıf arasındaki modellemeyi sağlayan notasyonlardır. Yani sınıfın bir Entity sınıfı olarak davranmasını sağlayan notasyonlardır. Buradan hareketle @Entity ve @Id notasyonlarının Mantıksal Notasyon, @Table ve @Column notasyonlarının da Fizikesel Notasyon olduğunu söyleyebiliriz.
Bu yazıda bu kadar arkadaşlar. Gelecek yazıda Id Generation konusunu işleyeceğiz. Öneri ve eleştirileriniz için [email protected] adresine mail atabilirsiniz. Sağlıcakla kalın.