@TostMaria

Hibernate many to many с дополнительными атрибутами?

Добрый день!
Вопрос про отношение many-to-many через hibernate xml-конфигурацию (Java). Я нашла много простых примеров, но они мне не подходят. Во всех подобных примерах таблица, которая обеспечивает связь user_achievement состоит только из двух колонок - id пользователя и id ачивмента, но мне нужно хранить там дополнительные данные, такие как дата приобретения пользователем ачивки и другие. Кроме того, во всех примерах отношение many-to-many описывается через Set, а мне нужно через List, т.к. важен порядок, в котором пользователь приобретал ачивки.

Т.е. суть вопроса:
Есть два класса пользователь - User, и достижение - Achievement, между ними требуется описать соотношение many-to-many через xml hibernate, чтобы можно было добавлять дату приобретения ачивки и другие параметры.
Как это сделать, и возможно ли такое в принципе?
  • Вопрос задан
  • 2846 просмотров
Решения вопроса 1
@bobzer
Java EE Developer
Думаю, что вам нужен one-to-many на самом деле, т.е. в сущности User хранится список сущностей Achievement. При этом сущность Achievement имеет поля, описывающие конкретное достижение конкретного пользователя (дата получения и другие параметры), а также ссылку на тип достижения (следующий уровень one-to-many). По поводу Set/List - как объявите в классе так и будет, но для сортировки требуется указать order-by в .hbm.xml.

Примерно так:
public class User {
    private List<Achievement> achievements;
    get...
    set...
}

public class Achievement {
    private User user;
    private Date createDate;
    private DicAchievementType type;//справочник типов достижений
    get...
    set...
}


User.hbm.xml
<bag name="achievements" inverse="true" cascade="all,delete-orphan" order-by="CREATE_DATE">
    <key column="user_id"/>
    <one-to-many class="Achievement"/>
</bag>


Achievement.hbm.xml
<many-to-one name="user" column="user_id" class="User"/>
<many-to-one name="type" column="achievement_type_id" class="DicAchievementType"/>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы