DEV Community

Mustafa  Çam
Mustafa Çam

Posted on

jpa ve hibernate

Java Persistence API (JPA) ve Hibernate, Java ile ilişkisel veritabanlarına erişim ve yönetim için kullanılan teknolojilerdir. Her iki teknoloji de Object-Relational Mapping (ORM) yaklaşımını kullanarak, Java nesneleri ile veritabanı tabloları arasında bir köprü kurar. Ancak, JPA ve Hibernate arasında bazı önemli farklar bulunmaktadır.

Java Persistence API (JPA)

JPA, Java platformu için standart bir ORM API'sidir. Java EE (Enterprise Edition) ve Jakarta EE standartlarının bir parçasıdır. JPA, ORM araçları için bir çerçeve sunar, ancak kendisi doğrudan bir ORM aracı değildir. JPA, veritabanı işlemleri için bir dizi anotasyon ve API sağlar, ancak JPA'nın kendisi bir implementasyon içermez. Bu nedenle, JPA kullanmak için bir JPA sağlayıcısına ihtiyaç vardır (örneğin, Hibernate, EclipseLink, OpenJPA).

JPA'nın Temel Bileşenleri

  1. Entity: Veritabanı tablosu ile eşleştirilen Java sınıfıdır.
  2. Entity Manager: Entity nesnelerini yöneten ve veritabanı işlemlerini gerçekleştiren sınıftır.
  3. Persistence Context: Entity Manager tarafından yönetilen entity nesnelerinin yaşadığı bellek alanıdır.
  4. Query Language (JPQL): SQL benzeri bir dil olan JPQL (Java Persistence Query Language) kullanarak veritabanı sorguları yazmanızı sağlar.

JPA Kullanımına Örnek

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

@Entity
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private int age;

    // Getter ve Setter metodları
}
Enter fullscreen mode Exit fullscreen mode

Hibernate

Hibernate, popüler bir ORM aracıdır ve JPA sağlayıcısı olarak da kullanılabilir. Hibernate, JPA standartlarını destekler ve kendi ek özelliklerini sunar. Hibernate, veritabanı işlemlerini daha kolay ve daha verimli hale getiren birçok gelişmiş özellik sağlar, örneğin:

  • Cache Management: İlk ve ikinci seviye önbellekleme.
  • Lazy Loading: İlişkili nesnelerin gerektiğinde yüklenmesi.
  • Automatic Table Generation: Entity sınıflarına göre veritabanı tablolarının otomatik oluşturulması.
  • Hibernate Query Language (HQL): SQL'e benzer ancak nesneye yönelik bir sorgu dili.

Hibernate Kullanımına Örnek

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

@Entity
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private int age;

    // Getter ve Setter metodları
}
Enter fullscreen mode Exit fullscreen mode

Hibernate yapılandırması ve kullanımına örnek:

  1. Maven Bağımlılıkları:
   <dependencies>
       <dependency>
           <groupId>org.hibernate</groupId>
           <artifactId>hibernate-core</artifactId>
           <version>5.4.32.Final</version>
       </dependency>
       <dependency>
           <groupId>org.hibernate</groupId>
           <artifactId>hibernate-entitymanager</artifactId>
           <version>5.4.32.Final</version>
       </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>8.0.23</version>
       </dependency>
   </dependencies>
Enter fullscreen mode Exit fullscreen mode
  1. Hibernate Configuration (hibernate.cfg.xml):
   <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
       "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
   <hibernate-configuration>
       <session-factory>
           <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
           <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
           <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/your_database</property>
           <property name="hibernate.connection.username">your_username</property>
           <property name="hibernate.connection.password">your_password</property>
           <property name="hibernate.hbm2ddl.auto">update</property>
           <property name="hibernate.show_sql">true</property>
           <mapping class="com.example.Employee"/>
       </session-factory>
   </hibernate-configuration>
Enter fullscreen mode Exit fullscreen mode
  1. Hibernate Util Class (HibernateUtil.java):
   import org.hibernate.SessionFactory;
   import org.hibernate.cfg.Configuration;

   public class HibernateUtil {
       private static final SessionFactory sessionFactory = buildSessionFactory();

       private static SessionFactory buildSessionFactory() {
           try {
               return new Configuration().configure().buildSessionFactory();
           } catch (Throwable ex) {
               throw new ExceptionInInitializerError(ex);
           }
       }

       public static SessionFactory getSessionFactory() {
           return sessionFactory;
       }
   }
Enter fullscreen mode Exit fullscreen mode
  1. Main Class (Main.java):
   import org.hibernate.Session;
   import org.hibernate.Transaction;

   public class Main {
       public static void main(String[] args) {
           Session session = HibernateUtil.getSessionFactory().openSession();
           Transaction transaction = session.beginTransaction();

           Employee employee = new Employee();
           employee.setName("John Doe");
           employee.setAge(30);

           session.save(employee);

           transaction.commit();
           session.close();
       }
   }
Enter fullscreen mode Exit fullscreen mode

JPA ve Hibernate Arasındaki Farklar

  1. Standart ve Araç: JPA bir standarttır, Hibernate ise bu standardı uygulayan bir araçtır.
  2. Ek Özellikler: Hibernate, JPA'nın sunduğu temel özelliklerin yanı sıra birçok gelişmiş özellik sunar.
  3. Konfigürasyon ve Kullanım: Hibernate'in kendi konfigürasyon dosyaları ve API'leri vardır, ancak aynı zamanda JPA anotasyonları ve EntityManager API'si ile de kullanılabilir.

Özet

  • JPA: Java platformu için bir ORM standardıdır ve farklı JPA sağlayıcıları tarafından uygulanır.
  • Hibernate: Popüler bir ORM aracıdır ve aynı zamanda JPA sağlayıcısı olarak da kullanılabilir. Hibernate, JPA standartlarını destekler ve ek özellikler sunar.

JPA ve Hibernate birlikte kullanıldığında, JPA'nın standart API'si ve Hibernate'in ek özelliklerinden yararlanılarak daha esnek ve güçlü bir veri erişim katmanı oluşturulabilir.

Top comments (0)