|  |  | 

Hibernate Java

Hibernate Get Entity Annotated Table Name (Nesneye Tanımlanan Tablo Adını Almak)

Hibernate kullanımında, oluşturduğumuz entity lere verdiğimiz annotation ların sorgu içerisinde kullanılması sırasında, tablo adına ihtiyaç oluyor. Hiberante tabloları kendisi oluşturmasına karşın, örneğin elle sorgu oluşturmak istediğimizde tablo adına ihtiyaç oluyor haliyle. Bu durumda tablo adını elle yazmaktansa, her bir nesnenin içinde halihazırda tanımlı olan tablo adını yakalamamız gerekiyordu. Bu işlem için bir örnek oluşturalım örneğin;

Öğrenci(Student) diye bir nesnemiz olsun. Bu nesnemizde de Adı(name), Numarası(number), Yaşı(age) diye 3 özelliğimiz olsun.

Ogrenci.java aşağıdaki gibidir.

package com.dlgr.hibernatesample.model;

import javax.persistence.Entity;
import javax.persistence.Table;

/**
 * Created by dlgr on 14.12.2016.
 */
@Entity
@Table(name = "student")
public class Student {
    private String name;
    private Long number;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getNumber() {
        return number;
    }

    public void setNumber(Long number) {
        this.number = number;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

*
*
*
Bu aralıkta View ve Servisimiz var. Oralarla ilgili işimiz olmadığı için atlıyorum.

*
*
*

Data access objectimizde bu nesnemizi kullanarak nasıl sorgu oluşturduğumuza bakalım.

package com.dlgr.hibernatesample.dao;

import com.dlgr.hibernatesample.model.Student;

/**
 * Created by dlgr on 14.12.2016.
 */
public class StudentDao extends MainDao<Student> {

    public StudentDao() {
        super(Studentclass);
    }
}

Burada hani annotation da tanımlı olan tablo adının kullanıldığı yer dediğinizi duyar gibiyim. Burada kullanacak olsak neden ihtiyacımız olsun ki bu annotation ı almaya. Her bir nesne için oluşturduğumuz data access object içine yazardık tablo adını da elle.

E o zaman bu annotation nerede kullanılacak? Tabikide MainDao da.

Neden burada kullanalım ki? Her nesnede bu fonksiyonlara erişebilelim diye.

MainDao muza bakacak olursak,

package com.dlgr.hibernatesample.dao;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

import javax.persistence.Table;

/**
 * Created by dlgr on 14.12.2016.
 */
public class MainDao<T> {

    private StandardServiceRegistry serviceRegistry;
    private SessionFactory sessionFactory;
    private final Class<T> persistentClass;

    public OgrenciBaseDao(Class<T> persistentClass) {
        this.persistentClass = persistentClass;
    }

    public SessionFactory createSessionFactory(Configuration configuration) {
        serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
                configuration.getProperties()).build();
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        return sessionFactory;
    }

    public SessionFactory getSessionFactory() {
        if (sessionFactory == null) {
            Configuration cfg = new Configuration().configure().addAnnotatedClass(persistentClass);
            sessionFactory = createSessionFactory(cfg);
        }
        return sessionFactory;
    }

    public Session getSession() throws HibernateException {
        return getSessionFactory().getCurrentSession() == null ? getSessionFactory().openSession() : getSessionFactory().getCurrentSession();
    }

    public void deleteAll() {
        //Table is javax.Persistence.Table
        getSession().createQuery("delete from " + persistentClass.getAnnotation(Table.class).name()).executeUpdate();
    }

}

Görüldüğü üzere, deleteAll fonksyonu, MainDao içerisinde tanımlandı ve artık tüm kendisinden türeyen tüm entityler için geçerli olacak.

Share
hibernate-get-entity-annotated-table-name-nesneye-tanimlanan-tablo-adini-almak

ABOUT THE AUTHOR

Java Software Developer

POST YOUR COMMENTS

Your email address will not be published. Required fields are marked *

Name *

Email *

Website

Aralık 2017
P S Ç P C C P
« Şub    
 123
45678910
11121314151617
18192021222324
25262728293031

Son Yorumlar