Архив рубрики: Hibernate

Конвертация значений между базой данных и объектами предметной области в Hibernate с помощью аннотации @ColumnTransformer

Данные, хранимые в колонках БД бывает необходимо как-то преобразовывать при отображении в объекты классов предметной области. И, наоборот, при сохранении данных из объектов в БД также необходимо делать обратное преобразование. Например, температура в объекта может храниться в градусах Цельсия, а в БД в фаренгейтах. Выполнить такое преобразование можно с помощью аннотации @ColumnTransformer.

Читать далее

Создание производных полей в классах предметной области с помощью аннотации @Formula в Hibernate

Зачастую выборка из таблицы должна содержать не только колонки с данными, но и колонки с вычисляемыми (обычно с помощью функций и подзапросов) значениями. Это могут быть, например, средние, минимальные и максимальные величины. Если для таких случаев по тем или иным причинам в БД не созданы представления (view), то мы можем указать Hibernate’у усложнить запрос и выбрать дополнительные данные в выборку с помощью аннотации @Formula.

Читать далее

Изменение способа доступа к отдельному полю класса предметной области с поля на геттер и обратно в Hibernate с помощью аннотации @Access

По умолчанию при выборе способа доступа к полю Hibernate ориентируется на положение обязательной аннотации @Id. Если @Id стоит над полем, то доступ (установка и чтение значений) ко всем полям будет осуществляться через механизмы рефлексии непосредственно на поле. Если аннотация над геттером, то значения полей будут устанавливаться и считываться Hibernate’ом через геттеры и сеттеры (при этом аннотация над сеттером никогда не ставится).

Изменить способ доступа к отдельному полю можно с помощью аннотации @Access.

Читать далее

Создание NOT NULL ограничений на колонки БД с помощью аннотаций @Basic и @Column в Hibernate.

Если Spring приложение запускается, например, с параметром spring.jpa.hibernate.ddl-auto=update, то Hibernate сам берёт на себя задачу по созданию и модификации схемы БД в соответствии с описаниями классов предметной области в приложении. С помощью аннотаций можно уточнять некоторые настройки схемы, в том числе ограничения колонок на допустимость/недопустимость значений NULL.

Читать далее

Исключение поля класса из отображения в колонку БД в Hibernate с помощью аннотации @Transient или ключевого слова transient

Не всегда нужно, чтобы все поля класса отображались в соответствующие колонки в базе данных. Но Hibernate по умолчанию пытается отобразить именно все поля класса в колонку или колонки БД следуя определённым правилам. Чтобы исключить то или иное поле класса из отображения используется либо аннотация @Transient, либо ключевое слово transient.

Читать далее

Создание суррогатов представлений (view) базы данных на уровне приложения с помощью Hibernate

Если по тем или иным причинам нет возможности создать полноценное представление прямо в БД, то Hibernate позволяет создать суррогат такого представления с помощью аннотации @org.hibernate.annotations.Subselect прямо в приложении.

Читать далее

Создание неизменяемых сущностей с помощью аннотации @Immutable в Hibernate

Если в Hibernate пометить сущность аннотацией @org.hibernate.annotations.Immutable, то Hibernate учтёт этот момент и осуществит ряд оптимизаций при работе с данной сущностью.

Читать далее

Использование в Hibernate аннотаций @DynamicInsert и @DynamicUpdate для создания SQL инструкций вставки и обновления во время выполнения

Чтобы Hibernate не создавал SQL запросы на вставку и обновление строк заранее, на этапе запуска приложения, а делал это каждый раз во время непосредственно вставки/обновления, можно использовать аннотации @DynamicInsert и @DynamicUpdate.

Читать далее

Использование аннотации @Entity для решения конфликтов имён в JPA запросах при наличии классов предметной области с одинаковыми именами

Может так сложиться, что в проекте будет некоторое количество классов предметной области с одинаковыми именами, но расположенные в разных пакетах. Например, два класса Client. Им могут быть сопоставлены разные таблицы, но в JPA запросах вида «select c from Client c» будет иметь место неоднозначность. Чтобы эту неоднозначность снять, можно воспользоваться параметром name аннотации @Entity.

Читать далее

Создание имён таблиц в Hibernate по заданным правилам

В Hibernate есть возможность определить правила именования для всех автоматически создаваемых таблиц для классов предметной области. Обычно такие правила сводятся к присоединению определённых префиксов или постфиксов к именам таблиц. Также можно проверять имена создаваемых таблиц на соответствие корпоративным правилам и т.п.

Читать далее