Архив метки: @jakarta.persistence.ElementCollection

Отображение полей типа Set и List в встраиваемых (@Embeddable) классах

Встраиваемые(@Embeddable) классы-значения могут содержать поле типа той или иной коллекции (List, Set и т.п.). Тогда данные этой коллекции будут храниться в отдельной таблице, которая может быть настроена с помощью аннотаций @ElementCollection и @CollectionTable.

Читать далее

Отображение полей типа Map встраиваемых (@Embeddable) компонентов с помощью аннотаций @ElementCollection и @CollectionTable

Класс-сущность может содержать поле типа Map, в котором либо ключ, либо значение, либо и то и другое будет встраиваемого (@Embeddable) типа. Такие данные отображаются в отдельные таблицы, которые можно настроить с помощью @ElementCollection и @CollectionTable, а также некоторых других аннотаций.

Читать далее

Отображение полей типа List и Set встраиваемых (@Embeddable) компонентов с помощью аннотаций @ElementCollection и @CollectionTable

Если класс-сущность содержит не просто поле встраиваемого (@Embeddable) типа, а коллекцию объектов встраиваемого типа, то для данных этих объектов будет создана отдельная таблица, которая настраивается с помощью аннотаций @ElementCollection и @CollectionTable.

Читать далее

Выборка и сортировка данных отображаемых коллекций оператором ORDER BY вызываемым аннотацией @org.hibernate.annotations.OrderBy

Если отображаемый класс содержит поле типа коллекции, поддерживающей порядок элементов, например, List<String> emails, то с помощью аннотации @org.hibernate.annotations.OrderBy можно указать Hibernate’у добавлять в конец запроса на выборку выражение ORDER BY… с произвольным правилом сортировки. В результате данные в такую коллекцию попадут отсортированными ещё в БД.

Отметим, что это произвольное правило может содержать функции БД и вообще практически любой произвольный SQL, что может сделать такой подход зависимым от вендора СУБД.

Читать далее

Выборка и сортировка данных отображаемых коллекций оператором ORDER BY вызываемым аннотацией @javax.persistence.annotations.OrderBy

Если отображаемый класс содержит поле типа коллекции, поддерживающей порядок элементов, например, List<String> emails, то с помощью аннотации @javax.persistence.annotations.OrderBy можно указать Hibernate’у добавлять в конец запроса на выборку выражение ORDER BY COLUMN_NAME ASC. В результате данные в такую коллекцию попадут отсортированными ещё в БД.

Читать далее

Автоматическая сортировка отображаемых коллекций типа Set и Map методом compareTo() с помощью аннотации @SortNatural

Если отображаемый класс содержит поля типа SortedMap или SortedSet, то их можно пометить аннотацией @SortNatural. И тогда после выборки данных из БД, если они, как большинство базовых типов, имплементируют интерфейс Comparable, то они будут отсортированы методом compareTo() и будут доступны в этих полях уже в отсортированном виде.

Отметим, что при таком подходе сортировка будет проведена в java-приложении. Если нужна сортировка выборки на стороне БД, то это делается аннотациями @javax.persistence.annotations.OrderBy или @org.hibernate.annotations.OrderBy.

Читать далее

Автоматическая сортировка отображаемых коллекций типа Set и Map любым компаратором с помощью аннотации @SortComparator

Если отображаемый класс содержит поля типа SortedMap или SortedSet, то их можно пометить аннотацией @SortComparator. И тогда после выборки данных из БД они будут отсортированы с помощью заданного java-компаратора и будут доступны в этих полях уже в отсортированном виде.

Отметим, что при таком подходе сортировка будет проведена в java-приложении. Если нужна сортировка выборки на стороне БД, то это делается аннотациями @javax.persistence.annotations.OrderBy или @org.hibernate.annotations.OrderBy.

Читать далее

Отображение поля типа Map в отдельную таблицу в Hibernate с помощью аннотаций @ElementCollection и @CollectionTable

Если отображаемый класс содержит поле типа Map, параметризованное базовыми типами (<String, String>, <Integer, Boolean> и т.п.), то данные этого поля не могут быть отображены просто в колонку соответствующей таблицы. Их необходимо отобразить в отдельную таблицу с внешним ключом на id основной.

Например, если класс Person содержит поле Map<String, Boolean> emails, то список адресов электронной почты конкретного человека не может храниться с ним в одной таблице PERSON, нужно завести для них отдельную таблицу EMAILS и хранить там. Hibernate позволяет решить эту задачу, не создавая отдельный класс-сущность Email, а просто разметив поле Map<String, Boolean> emails аннотациями @ElementCollection, @CollectionTable, @MapKeyColumn и @Column.

Читать далее

Отображение поля типа List в отдельную таблицу с поддержкой порядка элементов в Hibernate с помощью аннотаций @ElementCollection и @CollectionTable

Если отображаемый класс содержит поле типа List, параметризованный базовым типом (<String>, <Integer>, и т.п.), то данные этого поля не могут быть отображены просто в колонку соответствующей таблицы. Их необходимо отобразить в отдельную таблицу с внешним ключом на id основной.

Например, если класс Person содержит поле List<String> emails, то список адресов электронной почты конкретного человека не может храниться с ним в одной таблице PERSON, нужно завести для них отдельную таблицу EMAILS и хранить там. Hibernate позволяет решить эту задачу, не создавая отдельный класс-сущность Email, а просто разметив поле List<String> emails аннотациями @ElementCollection и @CollectionTable.

Так как в данном случае речь идёт о поле типа List, то элементы будут считаться упорядоченными, что позволит с помощью аннотации @OrderColumn задать отдельную колонку для хранения данных о порядке элементов.

Читать далее

Отображение поля типа Set в отдельную таблицу в Hibernate с помощью аннотаций @ElementCollection и @CollectionTable

Если отображаемый класс содержит поле типа коллекции базового типа, например, Set<String>, то данные этого поля не могут быть отображены просто в колонку соответствующей таблицы. Их необходимо отобразить в отдельную таблицу с внешним ключом на id основной.

Например, если класс Person содержит поле Set<String> emails, то список адресов электронной почты конкретного человека не может храниться с ним в одной таблице PERSON, нужно завести для них отдельную таблицу EMAILS и хранить там. Hibernate позволяет решить эту задачу, не создавая отдельный класс-сущность Email, а просто разметив поле Set<String> emails аннотациями @ElementCollection и @CollectionTable.

Так как в данном случае речь идёт о поле типа Set, то элементы будут считаться не упорядоченными. Если необходимо поддерживать порядок элементов, то поле должно иметь тип List.

Читать далее