Библиотека Testcontainers позволяет поднять тестовую среду в Docker-контейнере на время тестов, что довольно удобно.
Читать далее «Тестирование с помощью Testcontainers: как поднять в контейнере тестовую базу»
Spring Data
Репозитории
- Spring Data JDBC: JdbcTemplate и NamedParameterJdbcTemplate
- Spring Data JDBC: CrudRepository и Query methods
- Spring Data: Custom repository и составной репозиторий
- Spring Data JPA: запросы, генерируемые по имени метода
Mapping
- Отношение ManyToOne в Hibernate и Spring
- Отношение OneToOne в Hibernate и Spring
- Отношение OneToMany в Hibernate и Spring
- Отношение ManyToMany в Hibernate и Spring
- Синхронизация двунаправленных (bidirectional) отношений
- Как работает orphanRemoval
- Cascade Types (пример на Hibernate и Spring Boot)
Mapping наследования
- Наследование сущностей с помощью Joined Table (пример на Hibernate и Spring Boot)
- Наследование сущностей с помощью Single Table (пример на Hibernate и Spring Boot)
Fetching
Исключения
NonUniqueResultException и NoResultException
JPQL
- JPQL DISTINCT (пример на Hibernate и Spring Boot)
- Получение результата запроса в виде Map в Hibernate
Проекции
- Способы получения проекций в Hibernate
- Как получить проекцию OneToMany (пример на Hibernate и Spring Boot)
Еще
Получение результата запроса в виде Map в Hibernate
Иногда удобно извлечь из базы данные в вид Map. Например, если запрос содержит group by. Ниже рассмотрим, как это сделать.
Читать далее «Получение результата запроса в виде Map в Hibernate»
Кэш первого и второго уровня в Hibernate и READ_ONLY CacheConcurrencyStrategy
В этой статье мы рассмотрим, что такое кэш первого и второго уровня в Hibernate на примере Spring Boot приложения.
Читать далее «Кэш первого и второго уровня в Hibernate и READ_ONLY CacheConcurrencyStrategy»
Как получить проекцию OneToMany (пример на Hibernate и Spring Boot)
Мы уже рассматривали несколько способов получить проекцию. Самым мощным считается ResultTransformer. Его мы и будем использовать ниже для получения проекции OneToMany.
Читать далее «Как получить проекцию OneToMany (пример на Hibernate и Spring Boot)»
Способы получения проекций в Hibernate
Иногда требуется получить из базы не все поля сущности, а выборочно.
Например, есть шаблон проектирования DTO (Data Transfer Object) – суть его в том, что мы создаем специальный класс с небольшим количеством полей для отправки на фронтенд. К примеру, есть сущность City c 20 полями, а мы создаем для нее класс CityDto, который имеет всего два поля: id и name.
Читать далее «Способы получения проекций в Hibernate»
Пакетная обработка (batch processing) в Hibernate
Как уже говорилось, в конце транзакции происходит сброс (flush) накопившихся изменений в базу данных. При этом команды insert, update, delete в норме отправляются в базу данных по сети поодиночке.
Читать далее «Пакетная обработка (batch processing) в Hibernate»
Как работает Flush в Hibernate
В этой статье рассмотрим, что делает метод flush(), и когда он вызывается неявно.
Читать далее «Как работает Flush в Hibernate»
Cascade Types (пример на Hibernate и Spring Boot)
В этой статье рассмотрим самые популярные каскадные операции на примере отношения OneToMany (хотя их возможно использовать также в OneToOne и ManyToMany).
Читать далее «Cascade Types (пример на Hibernate и Spring Boot)»
JPQL DISTINCT (пример на Hibernate и Spring Boot)
Ключевое слово DISTINCT в JPQL перебрасывается в SQL запрос и работает как DISTINCT в SQL (если не указать в настройках запроса “не перебрасываться”). Но помимо этого, DISTINCT фильтрует результирующий список объектов (entities), исключая из него дубликаты. То есть DISTINCT может влиять на результат и на уровне базы, и на уровне Hibernate.
Читать далее «JPQL DISTINCT (пример на Hibernate и Spring Boot)»
Отношение ManyToMany в Hibernate и Spring
В этой статье рассмотрим, почему в отношении ManyToMany оптимальнее использовать для коллекций Set, а не List.
Читать далее «Отношение ManyToMany в Hibernate и Spring»