Hibernate ve Spring Data JPA Arasındaki Fark Nedir?

Emrullah YILDIRIM
2 min readJun 10, 2020

--

Bu kısa makalede, Hibernate ORM framework ve Spring Data JPA arasındaki farkın ne olduğunu açıklamak istiyorum. Önce JPA, Hibernate ve Spring Data JPA’nın tanımını bilelim, bu da Hibernate ve Spring Data JPA arasındaki farkı tartışmayı kolaylaştıracaktır. JPA ve Hibernate arasındaki farkı bir önceki yazımızda kısaca anlatmıştık. Eğer okumadı iseniz sizi hemen şöyle alalım.

Spring Data JPA nedir?

Spring Data, Spring kütüphanesinin bir parçasıdır. Spring Data JPA bir JPA sağlayıcısı değildir. JPA sağlayıcımızın (Hibernate gibi) üstüne ekstra bir soyutlama katmanı ekleyen bir kütüphane / çerçevedir.

Hibernate ve Spring Data JPA arasındaki fark nedir?

Hibernate bir JPA uygulamasıdır, Spring Data JPA ise bir JPA veri erişimi soyutlamasıdır. Spring Data, GenericDAO uygulamalarına bir çözüm sunar.

Spring Data JPA bir uygulama veya JPA sağlayıcısı değildir, veri erişim katmanlarını uygulamak için gerekli olan kaynak kodu miktarını önemli ölçüde azaltmak için kullanılan bir soyutlamadır. Hibernate, loose coupling avantajlarıyla ORM aracı olarak mükemmel bir seçimdir. Unutmayın, Spring Data JPA her zaman Hibernate veya Eclipse Lınk gibi JPA sağlayıcılarını gerektirir.

Ayrıca bu soruya daha fazla yorum okumak isterseniz Stackoverflow’daki şu konuya bakabilirsiniz.

Spring Data JPA ile örnek kodlama

Spring Data JPA ile CRUD operasyonları için herhangi bir implementasyon yazmanıza gerek yoktur.

Örn:

repo.findAll();

Bu kod bloğu ile tablodaki tüm kayıtlar listelenecektir. Eğer Hibernate kullanıyorsak, daha sonra repo.findAll () metodu için, aşağıdaki gibi bir implementasyon yazmaları gerekir:

Session session = this.sessionFactory.getCurrentSession();
List listUsers = session.createQuery("from Customer").list();
return listUsers;

Örn:

repo.findByAgeLessThan(int age);
  • Hibernate ise;
Session session = this.sessionFactory.getCurrentSession();
Query query = session.createQuery("from Customer where age>:age");
query.setParameter("age", 50);
List listUsers = query.list();
return listUsers;

Transactionality

Transactional işlemlerle, metot düzeyinde veya sınıf düzeyinde @Transactional bir bean oluşturabilirsiniz.

@Transactional(timeout=10)
public List findAll();

Bu yöntem, metotdun 10 saniyelik bir zaman aşımı ile yürütülmesini sağlar.

Auditing:

Auditing, bir entity kimin oluşturduğunu veya değiştirdiğini takip etmek anlamına gelir. JPA, entity kimin oluşturduğunu ve değiştirdiğini tanımlamak için @CreatedBy ve @LastModifiedBy anatasyonlarını sağlar. Ayrıca @CreatedDate ve @LastModifiedDate gibi diğer zamanlama denetimleri içinde anatasyonlar mevcuttur.

Örn:

class Customer { @CreatedBy
private UserJPA user;
@CreatedDate
private DateTime createdDate;
}

--

--

Emrullah YILDIRIM

Kendine Blogger. Yazarak öğrenen, yazdıklarini paylaşan Java Software Engineer.