So sánh sự khác nhau Hibernate Session với JPA EntityManager

So sánh sự khác nhau Hibernate Session với JPA EntityManager

Sự khác nhau giữa Session và EntityManager

Bạn cần nhớ rằng Hibernate là cài đặt của JPA (Hibernate thừa kế JPA).

EntityManager là chuẩn của JPA dùng để thực hiện truy vấn database (thêm, sửa, xóa…). Còn Session chỉ dùng riêng cho Hibernate.

Tất cả các framwork ORM thừa kế từ JPA đều có thể sử dụng lại EntityManager (mỗi framework có một cách cài đặt lại khác nhau).

Hibernate cũng cài đặt từ JPA nên ta cũng có thể sử dụng EntityManager với Hibernate. Vậy sao lại còn cần Hibernate Session? Có lẽ lúc thực hiện cài đặt lại các interface của JPA, người ta muốn thực hiện nhiều chức năng hơn ban đầu, ví dụ Hibernate Session có những method riêng mà EntityManager không có như saveOrUpdate(), load()...

Ta có thể sử dụng Session từ EntityManager như sau:

Session session = entityManager.unwrap(Session.class);

(Xem lại: Sự khác nhau giữa JPA với Hibernate)

So sánh sự khác nhau Hibernate Session với JPA EntityManager

Nên dùng EntityManager hay Session

Bản thân mình từ trước tới giờ vẫn hay sử dụng Hibernate Session, tuy nhiên các tài liệu đều khuyên dùng theo chuẩn API của JPA (tức là nên dùng EntityManager) vì một số lý do sau:

  • Các API của JPA có thể dùng lại ở nhiều project khác nhau, nhiều framework khác nhau.
  • Các API của JPA rõ ràng hơn Hibernate, nó không mắc phải một số nhược điểm như Hibernate
  • Các thư viện, kiến trục đều tập trung vào JPA API
  • Bạn vẫn có thể sử dụng Hibernate Session thông qua JPA EntityManager.
  • EntityManager cho phép sử dụng các annotation callback như @PrePersist, @PostPersist, @PreUpdate
  • Các annotation của JPA có thể làm việc được với Hibernate Session API.

(Mình cũng làm một số ví dụ về entitymanager, hibernate session, kết hợp với spring boot… thì nhận thấy đúng là sử dụng EntityManager tiện hơn rất nhiều, cấu hình cũng đơn giản hơn)

(Xem thêm: Code ví dụ Hibernate truy vấn database với SessionFactory, Session)

(Xem thêm: Code ví dụ truy vấn Hibernate với EntityManger, EntityManagerFactory)

So sánh sự khác nhau Hibernate Session với JPA EntityManager stackjava.com

Okay, Done!

 

References:

https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/Session.html

https://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html_single/

stackjava.com