Hibernate Ders-9 @Embeddable Ve @Embedded
Merhaba arkadaşlar;
Bu yazımda @Embedded ve @Embeddable notasyonlarından bahsedeceğim. Bazen sadece bir sınıf üzerinden işlemleri yapmak isteriz. Yani bir sınıf oluştururuz bunu @Entity ile kalıcı yaparız ve oluşturduğumuz ikinci sınıfı bu sınıfa dâhil edebiliriz. İşte bu işlemleri yapmamızda bu kullandığımız notasyonlar kullanılır. Şimdi basit bir örnek ile konuyu anlatayım:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">19961903</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernateornekler</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <mapping class="ders10EmbeddableVeEmbedded.Personel"/> </session-factory> </hibernate-configuration> |
Hibernate ayar dosyamızda veritabanı için gerekli bilgileri ve ayarları yaparız. Eğer tablolarımız mevcut değilse update ile oluşturulmasını eğer tablolarımız varsa güncellenmesini istiyoruz. Şimdi sınıflarımıza bakalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
package ders10EmbeddableVeEmbedded; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="Personel_Bilgileri") public class Personel implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String isim; private String soyisim; private Integer maas; Adres adres=new Adres(); public Personel(String isim, String soyisim, Integer maas) { super(); this.isim = isim; this.soyisim = soyisim; this.maas = maas; } @Id @Column(name="id") @GeneratedValue(strategy=GenerationType.AUTO) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(name="isim") public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } @Column(name="soyisim") public String getSoyisim() { return soyisim; } public void setSoyisim(String soyisim) { this.soyisim = soyisim; } @Column(name="maas") public Integer getMaas() { return maas; } public void setMaas(Integer maas) { this.maas = maas; } @Embedded public Adres getAdres() { return adres; } public void setAdres(Adres adres) { this.adres = adres; } } |
@Entity => Sınıfımızı kalıcı hale getirmek için kullanıldı.
@Table(name=”Personel_Bilgileri”) => Tablomuza ait özellikler kullanılmak için kullanıldı. Tablomuza ‘Personel_Bilgileri’ ismini verdik.
@Id => İd değerimizi tanımladık.
@Column(name=”id”) => Sütunumuza ait özellikler kullanılmak için kullanıldı. Tablomuza ‘id’ ismini verdik.
@GeneratedValue => Değişkenimizin primary key olacağını belirtir ve (strategy=GenerationType.AUTO) ile strateji olarak otomatik artacağını belirtiriz.
Adres sınıfımızdan nesne ürettik ve bu nesnenin getter/setter metotlarını ürettik :
1 2 3 4 5 6 7 |
@Embedded public Adres getAdres() { return adres; } public void setAdres(Adres adres) { this.adres = adres; } |
@Embedded => Kalıcı olmasını istediğimiz sınıfı bir kalıcı sınıfa eklemek için kullanılır.
Şimdi @Embeddable sınıfımıza bakalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
package ders10EmbeddableVeEmbedded; import java.io.Serializable; import javax.persistence.Embeddable; @Embeddable public class Adres implements Serializable { private static final long serialVersionUID = 1L; private String mahalle; private String cadde; private String sokak; private Integer apNo; public Adres() { } public Adres(String mahalle, String cadde, String sokak, Integer apNo) { super(); this.mahalle = mahalle; this.cadde = cadde; this.sokak = sokak; this.apNo = apNo; } public String getMahalle() { return mahalle; } public void setMahalle(String mahalle) { this.mahalle = mahalle; } public String getCadde() { return cadde; } public void setCadde(String cadde) { this.cadde = cadde; } public String getSokak() { return sokak; } public void setSokak(String sokak) { this.sokak = sokak; } public Integer getApNo() { return apNo; } public void setApNo(Integer apNo) { this.apNo = apNo; } } |
@Embeddable => Sınıfımızı bir sınıfa eklemek istediğimizi belirtir ve sınıfın en üstüne yazılır.
Bu sınıfımıza değişkenlerimiz ve yapıcı metotlarımız mevcut. Şimdi projemizi run edeceğimiz sınıfımızı inceleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package ders10EmbeddableVeEmbedded; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Yonetici { public static void main(String[] args) { Configuration configuration=new Configuration(); configuration.configure("ders10EmbeddableVeEmbedded/hibernate.cfg.xml"); SessionFactory factory=configuration.buildSessionFactory(); Session session=factory.openSession(); Transaction transaction=session.getTransaction(); //---------------------------------------------------------------------------------- Personel personel=new Personel("Alperen Emir", "KOC", 5350); Adres adres=new Adres("Deneme Mahallesi", "Uzunlar Caddesi", "Bilinmez Sokak", 18); personel.setAdres(adres); //----------------------------------------------------------------------------------- transaction.begin(); session.save(personel); transaction.commit(); //------------------------------------------------------------------------------------- } } |
1 2 3 |
Configuration configuration=new Configuration(); configuration.configure("ders10EmbeddableVeEmbedded/hibernate.cfg.xml"); |
Configuration sınıfından nesne ürettik ve bu nesneyi oluşturduğumuz hibernate.cfg.xml dosyasının yerini belirterek configure ettik.
Daha sonra configuration nesnesi ile SessionFactory oluşturuldu. Parametreli metotlarımız kullanılarak gerekli bilgiler değişkenlere aktarıldı. Ve en son olarak Transaction başlatılarak session ile personel nesnemiz kaydedildi. Ve işte oluşturulan tablo ve girdiğimiz bilgiler :
Görüldüğü üzere kayıt başarılı bir şekilde yapılmış ve sınıfımız kalıcı sınıfımıza eklenmiş…