Spring boot Jpa: спящий режим по умолчанию?

#java #spring #spring-boot #hibernate #jpa

#java #весна #спящий режим #spring-boot #jpa

Вопрос:

если использовать зависимость spring-boot-starter-data-jpa и расширять классы репозитория с помощью org.springframework.data.jpa.repository.JpaRepository, это «обычный jpa» или спящий режим?

В чем разница?

Комментарии:

1. JPA — это спецификация, спящий режим — это реализация спецификации.

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

3. Значит, не существует такого понятия, как «обычный JPA»? Используется ли спящий режим по умолчанию?

4. Разве «JPA» в «JpaRepository» не является достаточно четким ответом на то, какой API используется? FWIW JpaRepository также не является частью API JPA, это API Spring

Ответ №1:

JPA — это интерфейс, а спящий режим — это реализация. По умолчанию Spring использует спящий режим в качестве поставщика JPA по умолчанию. Если вы предпочитаете, вы можете использовать любую другую эталонную реализацию, например, EclipseLink для сохранения Java в вашем проекте Spring.

Ответ №2:

Из документов:

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

Spring Data Jpa действует как API высокого уровня, и вы должны указать, что будет основным поставщиком устойчивости:

1) Конфигурация ссылки Eclipse

Maven

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

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

Весенняя настройка

 @SpringBootApplication
public class Application extends JpaBaseConfiguration {

    protected Application(DataSource dataSource, JpaProperties properties,
            ObjectProvider<JtaTransactionManager> jtaTransactionManagerProvider,
            ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
        super(dataSource, properties, jtaTransactionManagerProvider, transactionManagerCustomizers);
    }


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

2) Конфигурация спящего режима

Maven

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

 <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
</dependency>
 

Весенняя настройка

 @SpringBootApplication
class SimpleConfiguration {}
 

Это все, что нужно для настройки поставщика гибернации. Конечно, вам нужно определить все ключевые свойства источника данных в вашем

 src/main/resources/application.properties


spring.datasource.url = jdbc:mysql://localhost:3306/db
spring.datasource.username = root
spring.datasource.password = root
...
 

Примеры основаны на проектах, определенных в (на основе https://github.com/spring-projects/spring-data-examples /)