ResultTransformer для получения проекции ManyToMany (пример на Hibernate и Spring Boot)

Здесь напишем более сложный ResultTransformer, чем в предыдущем примере. Помимо коллекции @OneToMany сущность будет содержать еще коллекцию @ManyToMany.

Кроме того, попробуем получить результат еще одним способом — без ResultTransformer, а с помощью операций над Stream.
Читать далее «ResultTransformer для получения проекции ManyToMany (пример на Hibernate и Spring Boot)»

Введение в QueryDSL

Есть несколько способов составить JPA-запрос, среди них — неудобный JPA Criteria API. Все признают, что запросы, составленные таким способом, плохо читаются. Как альтернатива появилась библиотека QueryDSL — она гораздо удобнее.
Читать далее «Введение в QueryDSL»

@SqlResultSetMapping — превращение результата SQL-запроса в объект

В этой статье пойдет речь о том, как превратить результат нативного SQL-запроса в объект.
Читать далее «@SqlResultSetMapping — превращение результата SQL-запроса в объект»

Составной ключ с @ClassId

Мы рассмотрели, как задать составной ключ с помощью аннотации @EmbeddedId. С @ClassId все очень похоже. Таблица в базе генерируется такая же (см. картинку ниже). Но поля ключа не просто вынесены в отдельны класс, а дублируются в основном.
Читать далее «Составной ключ с @ClassId»

Составной ключ с @EmbeddedId

Первичные ключи бывают простые (одно поле) и составные (несколько полей). В этой статье рассмотрим, как задать составной ключ с помощью аннотации @EmbeddedId.
Читать далее «Составной ключ с @EmbeddedId»

Наследование InheritanceType.TABLE_PER_CLASS

В этой статье рассмотрим стратегию наследования InheritanceType.TABLE_PER_CLASS. При такой стратегии классы преобразуются в независимые таблицы.
Читать далее «Наследование InheritanceType.TABLE_PER_CLASS»

Наследование с @MappedSuperclass

Аннотация @MappedSuperclass позволяет вынести общие поля в родительский класс, но при этом не создавать для него отдельную таблицу. При такой стратегии классы-наследники преобразуются в независимые таблицы. @MappedSuperclass никак не влияет на структуру в базе — это просто способ вынести общие поля.
Читать далее «Наследование с @MappedSuperclass»

Получение результата запроса в виде Map в Hibernate

Иногда удобно извлечь из базы данные в вид Map. Например, если запрос содержит group by. Ниже рассмотрим, как это сделать.
Читать далее «Получение результата запроса в виде Map в Hibernate»

Кэш первого и второго уровня в Hibernate и READ_ONLY CacheConcurrencyStrategy

В этой статье мы рассмотрим, что такое кэш первого и второго уровня в Hibernate. Пример на Spring Boot.
Читать далее «Кэш первого и второго уровня в Hibernate и READ_ONLY CacheConcurrencyStrategy»