Bu yazımda Transient ve Basic anotasyonu üzerinde biraz değineceğiz.Entity anotasyonu ile veritabanımızda varlık sınıfının tablolarının oluşturulması işlemini gerçekleştiriyorduk.Fakat sınıfımız içerisindeki bütün alanların veritabanında kolon olarak eklenmesini istemeyebiliriz.Veritabanında belirlediğimiz kolonun oluşturulmasını istemiyorsak Transient anotasyonunu kullanıyoruz.Tablo içerisine kolon olarak eklenmesini istiyorsak Basic anotasyonu ile bunu belirtebiliriz.Ufak bir projede açıklamaya ç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>0004-Blog-com.enesbyc.Transient-Basic</groupId>
<artifactId>0004-Blog-com.enesbyc.Transient-Basic</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.
Veritabanı içerisinde Student_Name alanının oluşturulmasını istiyorsak Basic anotasyonunu ekliyoruz.Eğer herhangi bir anotasyon belirtmezsek Basic olarak algılayacaktır ve veritabanında tablo içerine kolonu ekleyecektir.
Student_Surname alanının veritabanında kolon olarak oluşturulmasını istemiyoruz.Bu yüzden Transient anotasyonunu kullanıyoruz.
[code lang=”java”]
package com.enesbyc;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Transient;
@Entity
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;
@Basic//Veritabaninda Student_Name adinda bir kolon olusturacak.
@Column(name="Student_Name")
private String name;
@Transient//Veritabaninda Student_Surname adinda bir kolon olusturmayacak.
//Veritabaninda sadece Student_ID ve Student_Name kolonlarimiz olusturulacak.
@Column(name="Student_Surname")
private String surname;
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;
}
}
[/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 olusturuyoruz.
Student student=new Student();
student.setName("Enes");
student.setSurname("Boyaci");
SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
Session session=sessionFactory.openSession();
session.beginTransaction();
//Olusturdugumuz ö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 Basic anotasyonu kullandığım studentName alanı oluşturuldu.Transient anotasyonu kullandığımız kısımda tabloya kolon olarak eklenmedi.

Bir sonraki yazımda görüşmek üzere…