Sử dụng EclipseLink thay thế Hibernate trong Spring Data JPA Starter

Mặc định, khi các bạn sử dụng Spring Data JPA Starter trong Spring project của mình, Hibernate sẽ là default implementation được sử dụng. Thế nhưng, trong một số trường hợp, các bạn có thể không muốn sử dụng default implementation này. Ví dụ như mình: mình đang convert open source openid-connect này https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server từ Spring MVC sang Spring Boot https://github.com/huongdanjavacom/openid-connect-spring-boot, opensource này đang sử dụng EclipseLink thay vì Hibernate. Trong trường hợp như mình, cách thay thế EclipseLink bằng Hibernate như thế nào? Mình sẽ hướng dẫn các bạn làm điều đó trong bài viết này các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Spring Boot project:

Sử dụng EclipseLink thay thế Hibernate trong Spring Data JPA Starter

với Spring Data JPA Starter và PostgreSQL dependency như sau:

Sử dụng EclipseLink thay thế Hibernate trong Spring Data JPA Starter

Cấu hình thông tin database trong tập tin application.properties:

và chạy ứng dụng Spring Boot này, các bạn sẽ thấy log message như sau:

Đọc kỹ những dòng log trên, các bạn sẽ thấy việc Spring Data JPA Starter sử dụng Hibernate làm default implementation như thế nào.

Bây giờ, để thay thế Hibernate default implementation này bằng EclipseLink, đầu tiên, mình sẽ khai báo EclipseLink dependency như sau:

Sau đó thì exclude Hibernate dependency trong Spring Data JPA Starter dependency như sau:

Spring Boot sử dụng class HibernateJpaAutoConfiguration để cấu hình hết tất cả những thông tin cần thiết cho Hibernate default implementation. Nếu các bạn take a look class HibernateJpaAutoConfiguration này, các bạn sẽ thấy, tất cả các thông tin liên quan đến Hibernate được Spring Boot cấu hình trong class HibernateJpaConfiguration:

Class HibernateJpaConfiguration này extends từ class JpaBaseConfiguration. Đây là base class để chúng ta có thể extends và cấu hình JPA cho từng implementation mà các bạn muốn. Hibernate là một implementation và EclipseLink cũng là một implementation của JPA.

Chúng ta sẽ tạo mới class để cấu hình JPA cho EclipseLink:

2 phương thức mà các bạn cần phải implement trong class EclipseLinkJpaConfiguration là createJpaVendorAdapter() và getVendorProperties().

Phương thức createJpaVendorAdapter() sẽ return lại implementation provider cho JPA. Mặc định thì Spring đã hỗ trợ Hibernate và EclipseLink:

Sử dụng EclipseLink thay thế Hibernate trong Spring Data JPA Starter

nên các bạn chỉ cần return lại đối tượng của class EclipseLinkJpaVendorAdapter là được.

Phương thức getVendorProperties() giúp chúng ta định nghĩa một số cấu hình cụ thể cho từng implementation. Cho EclipseLink thì các bạn có thể sử dụng class PersistenceUnitProperties để add những properties mà nó hỗ trợ. Ví dụ như sau:

Bây giờ, nếu chạy lại ứng dụng này, các bạn sẽ thấy log message như sau:

Ứng dụng của chúng ta đang sử dụng EclipseLink rồi đó các bạn!

Add Comment