Встраиваемые(@Embeddable) классы-значения могут содержать поле типа той или иной коллекции (List, Set и т.п.). Тогда данные этой коллекции будут храниться в отдельной таблице, которая может быть настроена с помощью аннотаций @ElementCollection и @CollectionTable.
Читать далееАрхив метки: @jakarta.persistence.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.
Читать далее