«1. Обзор

По умолчанию Spring Data использует Hibernate в качестве поставщика реализации JPA по умолчанию.

Однако Hibernate, безусловно, не единственная доступная нам реализация JPA.

В этой статье мы рассмотрим шаги, необходимые для настройки EclipseLink в качестве поставщика реализации для Spring Data JPA.

2. Зависимость Maven

Чтобы использовать ее в нашем приложении Spring, нам просто нужно добавить зависимость org.eclipse.persistence.jpa в pom.xml нашего проекта:

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa</artifactId>
    <version>2.7.0</version>
</dependency>

По умолчанию, Spring Data поставляется с реализацией Hibernate.

Поскольку вместо этого мы хотим использовать EclipseLink в качестве поставщика JPA, он нам больше не нужен.

Поэтому мы можем удалить его из нашего проекта, исключив его зависимости:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Следующий шаг — сообщить Spring Framework, что мы хотим использовать EclipseLink в качестве реализации JPA.

3. Конфигурация Spring

JpaBaseConfiguration — это абстрактный класс, определяющий bean-компоненты для JPA в Spring Boot. Чтобы настроить его, мы должны реализовать некоторые методы, такие как createJpaVendorAdapter() или getVendorProperties().

Spring предоставляет готовую реализацию конфигурации для Hibernate под названием HibernateJpaAutoConfiguration. Однако для EclipseLink нам нужно создать пользовательскую конфигурацию.

Во-первых, нам нужно реализовать метод createJpaVendorAdapter(), который определяет используемую реализацию JPA.

Spring предоставляет реализацию AbstractJpaVendorAdapter для EclipseLink с именем EclipseLinkJpaVendorAdapter, которую мы собираемся использовать в нашем методе:

@Configuration 
public class EclipseLinkJpaConfiguration extends JpaBaseConfiguration { 

    @Override 
    protected AbstractJpaVendorAdapter createJpaVendorAdapter() { 
        return new EclipseLinkJpaVendorAdapter(); 
    }
    
    //...
}

Кроме того, мы должны определить некоторые свойства конкретного поставщика, которые будут использоваться EclipseLink.

Мы можем добавить их с помощью метода getVendorProperties():

@Override
protected Map<String, Object> getVendorProperties() {
    HashMap<String, Object> map = new HashMap<>();
    map.put(PersistenceUnitProperties.WEAVING, true);
    map.put(PersistenceUnitProperties.DDL_GENERATION, "drop-and-create-tables");
    return map;
}

Класс org.eclipse.persistence.config.PersistenceUnitProperties содержит свойства, которые мы можем определить для EclipseLink.

В этом примере мы указали, что хотим использовать переплетение и пересоздавать схему базы данных при запуске приложения.

И все! Это вся реализация, необходимая для перехода от поставщика Hibernate JPA по умолчанию к EclipseLink.

Обратите внимание, что Spring Data использует API JPA, а не какие-либо методы, специфичные для поставщика. Так что, по идее, проблем при переходе с одного поставщика на другого быть не должно.

4. Заключение

В этом кратком руководстве мы рассмотрели, как изменить поставщика реализации JPA по умолчанию, используемого Spring Data.

Мы увидели, как быстро и просто перейти с Hibernate, который используется по умолчанию, на EclipseLink.

Как всегда, полная реализация примеров доступна на Github.