Ничего сложного в этом нет, рассмотрим простой пример. Пусть у нас есть некий объект Book, книга, которая может относиться к нескольким жанрам, жанры инкапсулированы в enum BookGenre.
Маппинг будет выглядить так:
1: @Column()Во второй строке мы говорим hibernate-у о том что поле содержит коллекцию элементов BookGenre (конечно, с некоторой точки зрения это излишняя аннотация :)
2: @CollectionOfElements(targetElement = BookGenre.class)
3: @JoinTable(name = "Book_BookGenre", joinColumns = @JoinColumn(name = "book_id"))
4: @org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
5: private Setgenres = EnumSet.noneOf(BookGenre.class);
Третья аннотация присоединяет таблицу с именем Book_BookGenge, в которой и будут храниться все жанры. Hibernate создаст колонку element типа int (т.к. enum маппиться как int), и колонку (foreign ключ) book_id, указывающуу на книгу, к которой относится жанр.
Четвертая строка говорит что hibernate-у, что нужно удалять жанры из таблицы, если удаляется книга. т.е. удалять "осиротевшие" жанры.
Ну и пятой строкой мы инициируем пустой множество enum-ов определенного типа.
При работе hibernate сам сгенерирует нужный запрос, вытащит данные из таблицы жанров и правильно инициирует объект Book.
0 comments:
Отправить комментарий