Данные, хранимые в колонках БД бывает необходимо как-то преобразовывать при отображении в объекты классов предметной области. И, наоборот, при сохранении данных из объектов в БД также необходимо делать обратное преобразование. Например, температура в объекта может храниться в градусах Цельсия, а в БД в фаренгейтах. Выполнить такое преобразование можно с помощью аннотации @ColumnTransformer.
Читать далееАрхив рубрики: Hibernate
Создание производных полей в классах предметной области с помощью аннотации @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 есть возможность определить правила именования для всех автоматически создаваемых таблиц для классов предметной области. Обычно такие правила сводятся к присоединению определённых префиксов или постфиксов к именам таблиц. Также можно проверять имена создаваемых таблиц на соответствие корпоративным правилам и т.п.
Читать далее