SecondaryTable Anotasyonu Kullanımı

Bu yazımda SecondaryTable anotasyonu nedir ve nasıl kullanıldığına bakacağız.Oluşturduğumuz entity sınıflarımız veritabanında tablo olarak oluşturuluyordu.Tek bir sınıf içerisinde birden fazla tablo oluşturmak isteyebiliriz.Farklı bir Entity sınıfı oluşturmak yerine aynı Entity içerisinde SecondaryTable anotasyonunu kullanarak tek bir Entity içerisinde birden fazla tablolalama işlemi yapabiliriz.Ufak bir proje üzerinde anotasyonumuzu anlamaya çalışalım.
1)Maven projesi oluşturalım ve pom.xml dosyamız içerisine bağımlılıklarımızı ekleyelim.

[code lang=”xml”]
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>0005-Blog-com.enesbyc.SecondaryTable</groupId>
<artifactId>0005-Blog-com.enesbyc.SecondaryTable</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>

</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
[/code]

2)Projemize tekrar sağ tıklayarak File -> New -> Other -> XML File adımlarını izleyelim.XML seçip hibernate.cfg.xml dosyamızı projemize ekleyelim.Burada isim önemli farklı bir isimde açarsak proje bu xml dosyasını görmeyecektir ve hibernate configrasyon yapılamayacaktır.Hibernate dosyamız içerisinde veritabanı bağlantı bilgilerinde veritabanı adı , bağlanacağımız kullanıcı adı ve şifre alanlarını kendi veritabanımıza göre dolduralım.

[code lang=”xml”]
<?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>

<!– Database connection settings –>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/deneme</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>

<!– JDBC connection pool (use the built-in) –>
<property name="connection.pool_size">1</property>

<!– SQL dialect –>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!– Disable the second-level cache –>
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

<!– Echo all executed SQL to stdout Sql kodlarını consolda gösterir.–>
<property name="show_sql">true</property>

<!– Drop and re-create the database schema on startup Eğer önceden böyle bir tablo varsa silip yeni oluşturur. –>
<property name="hbm2ddl.auto">create</property>

<mapping class="com.enesbyc.Student"/>

</session-factory>

</hibernate-configuration>
[/code]

3) com.enesbyc paketi oluşturalım ve içerisinde Student sınıfımızı oluşturalım.Bu sınıf içerisinde veritabanımızda haritalanması için Entity anotasyonunu sınıfımızın üst kısmına yazalım. Ayrıca bu sınıf içerisindeki alanların özelliklerini belirtelim.Burada belirtilen özelliklere göre veritabanında haritalama işlemi yapacaktır.
Normal bir Entity sınıfımızdan farklı olarak SecondaryTable anotasyonunu kullanıyoruz ve name alanına oluşturulmasını istediğimiz ikinci tablonun adını yazıyoruz.Birince tablo Student tablosu olacaktır.İkinci tablo ise SecondaryTable anotasyonu içerisindeki belirttiğimiz StudentDetail tablosu olacaktır.
StudentDetail tablomuz içerisinde olmasını istediğimiz kolonlarımızın Column anotasyonu içerisinde table kısmında StudentDetail tablosu içerisinde kolon olarak eklenmesi gerektiğini belirtiyoruz.

[code lang=”java”]
package com.enesbyc;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SecondaryTable;

@Entity
@SecondaryTable(name = "StudentDetail")//StudentDetail adinda ikinci tablo olusturuyor.
public class Student {
@Id//Primary Key alani oldugunu belirtiyoruz.
@GeneratedValue(strategy=GenerationType.AUTO)//Id degerinin otomatik artmasini sagliyoruz.
@Column(name="Student_ID")
private int studentID;

@Column(name="Student_Name")
private String name;

@Column(name="Student_Surname")
private String surname;

@Column(name="Street",table="StudentDetail")//StudentDetail tablosunun sütunu oldugunu belirtiyor.
private String street;

@Column(name="Country",table="StudentDetail")//StudentDetail tablosunun sütunu oldugunu belirtiyor.
private String country;

public int getStudentID() {
return studentID;
}
public void setStudentID(int studentID) {
this.studentID = studentID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}

}

[/code]

4)Test sınıfımızı oluşturalım ve içerisinde tabloya veri ekleyelim.

[code lang=”java”]
package com.enesbyc.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.enesbyc.Student;

public class Test {
@SuppressWarnings({ "deprecation"})
public static void main(String[] args) {
//1 adet ögrenci oluþturuyoruz.
Student student=new Student();
student.setName("Enes");
student.setSurname("Boyaci");
student.setCountry("Country 1");
student.setStreet("Street 1");

SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
Session session=sessionFactory.openSession();
session.beginTransaction();

//Oluþturdugumuz ögrenciyi veritabanina kaydedelim.
session.save(student);

session.getTransaction().commit();
}
}

[/code]

5)Projemizi çalıştıralım ve konsol üzerinden çıktımızı kontrol edelim.Çıktımızdada gördüğümüz gibi veritabanı içerisinde Student ve StudentDetail isminde iki adet tablo oluşturuldu ve StudentDetail tablosunun kolonları table ile belirttiğimiz kısımlar oldu.
SecondaryTable
Bir sonraki yazımda görüşmek üzere…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir