Hibernate orm aracından yararlanılarak geliştirilen projelerde veya farklı bir orm aracı kullanılarak jpa üzerinden geliştirme yapılan projelerde sıklıkla kullandığımız bazı dipnotlar,bu dipnotların kullanımı ve açıklaması aşağıda yer almaktadır.Orm araçlarını yeni kullanmaya başlayanlar için,kendim de yeni öğrenmeye başladığım ve öğrendiklerimi unutmamak,unuttuğumda ise açıp bakmak için bir Türkçe kaynak oluşturdum.
- @NamedQuery
Named Query dipnotu projelerimizde sorgular yürütebilmemize olanak verir.Kullanımı ve daha detaylı bilgi için bu yazıma bakabilirsiniz.https://mesutpiskin.com/blog/jpa-namedquery-parametresiz-sorgular.html
- @Column
Entity sınıflarında tabloların daha önceden veritabanı yönetim sistemi ile hazırlanan kolonlarının ismini belirtmek,değiştirmek için kullanılır.Örneğim;aşağıda gördüğünüz gibi entity sınıfında bir değişkenimiz var bu değişken Siparis tablosundaki adetSparis kolonunu belirtmektedir.Fakat @Column yazdık ve SPARIS_ADETI dedik,uygulama çalıştığında veri tabanı üzerindeki tablonun adetSparis kolununun ismi SPARIS_ADETI olarak değişecektir.
@Column(name="SPARIS_ADETI") private String adetSparis;
- @Id
Tablolarda bulunan birincil anahtar (primary key) diye nitelendirdiğimiz kolonu belirtmek için kullanılır.Örneğin;tablomuzda bir kolon ve ismi idSparis olsun,sparisler tablosu için gelen sparişlerin numarası olarak nitelendirelim.Her sparişin 1 adet spariş numarası olur ve unique dediğim eşsiz bir veridir yani benzeri yoktur,bu yüzden bu kolonumuz birincil anahtır.Bunu belirtmek için entity sınıfımızda aşağıdaki gibi değişkenden önce veya get metodundan önce bunu belirtiriz.
@Id private int idSparis;
- @Table
Entity sınıfımız üzerinden haritalanan tablonun ismini belirtiğimiz dip nottur.Orm araçları buradaki etiketi alarak tablonun ismine vermektedir.Aşağıdaki gibi sınıftan haritalanacak olan tablonun isminin siparis olacağını belirttik.Mysql kullanıyorsanız büyük harfle yazsanız bile bunu küçük harfe,oracle ise küçük harfle yazsanız bile büyük harfe çevirecektir.
@Table(name="siparis") public class Siparis implements Serializable { ...
- @Transien
Bu dipnotun kullanıldığı değişken veritabanında ise tabloya karşılık gelecek olan alanın sınıfta var olacağı fakat tablo üzerinde bir kolona karşılık gelmeyeceği yanı tablo üzerinde bir kolonun oluşturulmaması gerektiğini belirtir.Yani bu dip nota sahip alan orm araçları tarafından görmezden gelinir.
@Transient private String urunkoduSparis;
- @Basic
Bu dipnotun kullanıldığı değişken veritabanında ise tabloya karşılık gelecek olan alanın mutlaka bulunması gerektiğini belirtmektedir.Kullanımı ise diğer dip notlara benzer şekildedir.
@Basic private String urunadiSparis;
- @Temporal
Bu dip not haritalanan kolunun bir tarih,saat tipinde olacağını yani zamana bağlı veri tiplerinde kullanırız.Farklı kullanım şekilleri vardır ve belirttiğiniz etiket ile sizin o değişkene atadığınız değeri belirttiğiniz formata çevirir.Örneği biz set metodu ile tarih ve saati verip,etiket olarak sadece tarih belirtirsek veritabanına veri tarih olarak kaydedilecektir.
@Temporal(TemporalType.DATE) private Date satisTarihi; /------------------------------- @Temporal(TemporalType.TIME) private Date satisTarihi;
- @Lob
Large object olarak ifade edilir,yani büyük veri tipleri için kullanılır.Her veritabanı yönetim sisteminin farklı büyük veri tipleri vardır örneğin mysql longtext diye belirtirken oracle lob diyebilir işte Lob dipnotunu verdiğimizde orm araçları bunu veritabanına göre ayarlayarak o kolonu büyük veri olarak oluşturur.
@Lob private String urunadiSparis;
- @GeneratedValue
Tablolarda bulunan otomatik artan veya belirli kurallara göre veritabanı tarafından otomatik olarak verilen değerlere karşılık gelen dipnottur.Otomatik artan bir id değerimiz varsa bunu id değişkeninden önce bu dipnot ile belirtiriz.Kullanımı ise oldukça kolaydır,farklı parametreler alabilmektedir.
@Id @GeneratedValue(strategy=GenerationType.AUTO) private int idSparis; //idSparis verisini otomatik artan bir değer yaptık artık set metodu ile veri ataması yapmamıza gerek kalmıyor.
- @TableGenerator
Otomatik artan değerlerde sistem tarafından oluşturulan id değerini tutmak için kullanılmaktadır.Bir sonraki oluşacak olan id değerini bir tablo oluşturarak saklayabilmektedir.Gerek ilişkisel tablolarda gerekse raporlama esnasında kullanılabilir.
@Id @TableGenerator(name="yenitablo",table="TBLSONID") @GeneratedValue(strategy=GenerationType.TABLE,generator="yenitablo") private int idSparis;
- @SecondaryTable
İlişkisel tablolar oluşturmak için kullanılır,bir entity(varlık) sınıfındaki verilerin birden fazla tablolarda tutulabilmesini sağlar.Örneğin bir sınıfımız var ve öğrenci bilgileri,notları,adresini,dersleri tutuyor fakat adres kolonunu biz farklı tabloda tutmak istiyoruz yani birden fazla adres olabileceğini düşünerek bir adres tablosu oluşturarak orada saklmak istiyoruz,bunun için SecondaryTable dipnotunu kullanıyoruz.
@Entity @Table(name="siparis")//1.siparis tablomuz @SecondaryTable(name="SparisAdresleri")//2.tablo public class Siparis implements Serializable { ..... @Column(table="SparisAdresleri") private String siparisAdres; //Column ile tablo ismini verdik ve adresler artık o tabloda tutulacaktır.
Oluşturulan diğer tablolarda ana tabloda bulunan id değeri de ilişki için diğer tablolara gönderilir.Yani ana tablodaki siparisid değeri olsa diğer tablolara da otomatik olarak bu id alanı eklenir ve değeri otomatik olarak verilir.
- @Embedded – @Embeddable
Bir varlık (entity) sınıfı içerisinde haritalanacak olan alanların bir kısmını başka bir varlık sınıfı olmayan sınıftan almak istediğimizde kullanılır.Örneği bir varlık sınıfımız var ve personel bilgileri içeriyor bir adet ise normal sınıfımız var ve adres isminde adres alanları içeriyor,cadde,sokak,il,ilçe vs. bu sınıfı varlık sınıfı üzerindeymişcesine veritabanına haritalamak ve bu sınıf içerisinde kullanmak için oluşturulmuş bir diptnottur.Burada adres sınıfımızın üzerinde @Embeddable dipnotu gelir bunu kullanacağımız varlık sınıfında ise bu sınıf tanımlanarak başına @Embedded dipnotu gelir.
//Varlık (Entity) sınıfı @Embedded private Adres adres; public Adres getAdres() { return adres; } public void setAdres(Adres adres) { this.adres = adres; } //Adres sınıfı import javax.persistence.Embeddable; @Embeddable public class Adres { ....
- @AttributeOverrides
- @AttributeOverride
- @ElementCollection
- @JoinTable
- @JoinColumn
- @GenericGenerator
- @CollectionId
- @ElementCollection EAGER ve LAZY
- @OneToOne