JPA (Java Persistence API)-08
Önceki yazımda Element Collection anotasyonlarından bahsetmiştim. Bu yazımda ise kaldığım yerden devam edeceğim.
Element Collection — Map<String,String>
- Map collection interface’ ini kalıtır.
- İlk önce jpa.elementCollection_mapStringString adında yeni bir maven projesi açıyoruz. src/main/java klasörünün altına com.proje.model paketi açıyoruz. Paketin altına da Personel entity sınıfını açıyoruz. İşte sınıfın içeriği :
3. Burada map ile key ve value olarak iki değer tutuyoruz. key anahtar kelimesi verinin tipini, value anahtar kelimesi ise verinin kendisini tutar.
- Map’ te listeye veri ekleme put metoduyla gerçekleşir.
- Map’ te tablonun ismini, sütunların ismini gerekli şekilde revize ettik.
4. src/main/java altına bir com.proje.test adında bir paket daha açıyoruz. Onun altına da Test adında bir sınıf açıp kayıtları veri tabanına kaydediyoruz. İşte sınıfın içeriği :
5. getPhoneNumbers()metoduyla PhoneNumbers tablosuna erişip put metoduyla verileri tabloya ekliyoruz.
- key olarak (takma ad) EV,IS,KISISEL anahtar kelimelerini kullanıyoruz. Böylece her bir telefon numarasının hangi personele ve nereye bağlı olduğunu gösteriyor.
6. Veri tabanına bir göz atalım :
- personel tablosu :
- phone_numbers tablosu :
Element Collection — Map<Enum,String>
8. Personel ve Test sınıfının içeriklerini biraz değiştirip kullanacağız.
9. Enum’ larda telefon tiplerini tutacağız. Enum sınıfların farkı ise sabit değiştirilemeyen veriler için kullanıyor olmasıdır.
Get Fatma Aleyna Doğan’s stories in your inbox
Join Medium for free to get updates from this writer.
10. jpa.elementCollection_mapEnumString adında bir maven projesi açıyoruz. Enum’ lar ı kullanabilmek için yardımcı bir paket açmamız gerekiyor. Öncelikle com.proje.model.util adında bir paket açıyoruz, onun altına da PhoneType adında bir enum açıyoruz. İşte enum’ un içeriği :
package com.proje.model.util;
public enum PhoneType {
KISISEL,EV,IS;
}11. com.proje.model adında bir paket daha açarak Personel sınıfını tanımlıyoruz. İşte sınıfın içeriği :
- Collection Table’ da gerekli konfigürasyonları yaptıktan sonra com.proje.test paketi ve altına da Test sınıfı açıyoruz. İşte sınıfın içeriği :
12. Veri tabanına göz atalım :
- personel tablosu :
- personel_phonenumber tablosu :
Element Collection — Fetch Type
13. Görüntülemek istediğimiz tablolar dışında diğer tabloları gizlemeye yarayan anotasyondur.
14. jpa.elementCollection.fetchType adında bir maven projesi oluşturuyoruz. src/main/java klasörü altına com.proje.model paketi açıp altına da Personel sınıfı oluşturuyoruz. İşte sınıfın içeriği :
- Diyelim ki biz sadece personel bilgilerini görmek istiyoruz ancak Lazy komutunu kullanmazsak email ve telefon numaralarının olduğu kayıtları da görmüş olacağız. Tabloda çok fazla kayıt olduğunu düşünürsek verimli bir çalışma olmayacağından bu anotasyondan yararlanıyoruz.
15. Bu örnekte de enum’ dan faydalanacağımız için com.proje.model.util adında yardımcı bir paket daha oluşturup PhoneType adında bir enum açıyoruz. İşte enum’ un içeriği :
package com.proje.model.util;
public enum PhoneType {
KISISEL,EV,IS;
}16. İki farklı test sınıfı kullanacağız biri tabloya veri eklemek için biri de veri çağırmak için olacak.
- TestPersist sınıfının içeriği :
17. Veri tabanına göz atalım :
- personel tablosu :
- personel_phoneNumber tablosu :
- personel_email tablosu :
- TestFind sınıfını çalıştırdığımızda null değerinin dönmemesi için persistence.xml’ de tablo oluşturma tag’ inini içeriğini “update”e çeviriyoruz. TestFind sınıfın içeriği :
- Konsol çıktısı :
şeklindedir.
Böylece yazımın sonuna geldim. Vakit ayırdığınız için teşekkürler..









