#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 /)