Сообщения

Показаны сообщения с ярлыком "Spring Data JPA"

Spring Boot: автоматически настроенные Data JPA тесты

Изображение
Вы можете использовать аннотацию @DataJpaTest для тестирования приложений JPA. По умолчанию он ищет классы @Entity и настраивает репозитории Spring Data JPA. Если на пути к классам доступна встроенная база данных, она также настраивает ее. Обычные компоненты @Component не загружаются в ApplicationContext. По умолчанию Data JPA тесты являются транзакционными и откатываются в конце каждого теста. Если это не то, что вы хотите, вы можете отключить управление транзакциями для теста или для всего класса следующим образом: import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @DataJpaTest @Transactional(propagation = Propagation.NOT_SUPPORTED) class ExampleNonTransactionalTests { } Data JPA тесты могут также внедрить bean-компонент TestEntityManager, который предоставляет альтернативу стандартному JPA En...

Spring Boot: создание и удаление JPA баз данных

Изображение
По умолчанию базы данных JPA создаются автоматически, только если вы используете встроенную базу данных (H2, HSQL или Derby). Вы можете явно настроить параметры JPA, используя свойства spring.jpa.*. Например, для создания и удаления таблиц вы можете добавить следующую строку в ваш application.properties: spring.jpa.hibernate.ddl-auto=create-drop Собственное внутреннее имя свойства Hibernate для этого - hibernate.hbm2ddl.auto. Вы можете установить его вместе с другими собственными свойствами Hibernate, используя spring.jpa.properties.* (Префикс удаляется перед добавлением их в менеджер сущностей). Следующая строка показывает пример настройки свойств JPA для Hibernate: spring.jpa.properties.hibernate.globally_quoted_identifiers=true Строка в предыдущем примере передает значение true для свойства hibernate.globally_quoted_identifiers диспетчеру сущности Hibernate. По умолчанию выполнение (или проверка) DDL откладывается до запуска ApplicationContext. Существует также флаг s...

Spring Boot: Spring Data JPA репозитории

Изображение
Репозитории Spring Data JPA - это интерфейсы, которые вы можете определить для доступа к данным. Запросы JPA создаются автоматически из имен ваших методов. Например, интерфейс CityRepository может объявить метод findAllByState(String state), чтобы найти все города (city) в данном штате (state). Для более сложных запросов вы можете аннотировать ваш метод аннотацией Query в Spring Data. Хранилища Spring Data обычно берутся из интерфейсов Repository или CrudRepository. Если вы используете автоконфигурацию, поиск в репозиториях происходит из пакета, содержащего ваш основной класс конфигурации (тот, который аннотирован @EnableAutoConfiguration или @SpringBootApplication). В следующем примере показано типичное определение интерфейса хранилища Spring Data: package com.example.myapp.domain; import org.springframework.data.domain.*; import org.springframework.data.repository.*; public interface CityRepository extends Repository<City, Long> { Page<City> findAll(Pageabl...

Spring Boot: JPA и Spring Data JPA

Изображение
Java Persistence API - это стандартная технология, которая позволяет "сопоставлять" (“map”) объекты с реляционными базами данных. POM spring-boot-starter-data-jpa обеспечивает быстрый способ начать работу. Он предоставляет следующие ключевые зависимости: Hibernate: одна из самых популярных реализаций JPA. Spring Data JPA: упрощает внедрение репозиториев на основе JPA. Spring ORM: Основная поддержка ORM от Spring Framework. Классы сущностей (Entity Classes) Традиционно классы JPA “Entity” указываются в файле persistence.xml. В Spring Boot этот файл не требуется, и вместо него используется “Entity Scanning”. По умолчанию все пакеты ниже вашего основного класса конфигурации (тот, который аннотирован @EnableAutoConfiguration или @SpringBootApplication) проверяются. Любые классы, аннотированные @Entity, @Embeddable или @MappedSuperclass, учитываются. Типичный класс сущности напоминает следующий пример: package com.example.myapp.domain; import java.io.Serializable; imp...