Hibernate двунаправленный много-много картографических советов! - PullRequest
2 голосов
/ 29 апреля 2010

Я удивился, если кто-нибудь сможет мне помочь. Я пытаюсь выяснить, что гуглить (или любые другие идеи !!), в основном, у меня есть двунаправленное сопоставление «многие ко многим» между сущностью пользователя и сущностью клуба (через таблицу соединений под названием userClubs). Теперь я хочу включить столбец в userClubs, которая представляет роль, так что, когда я вызываю user.getClubs (), я также могу определить, какой уровень доступа у них есть. Есть ли умный способ сделать это с помощью Hibernate или мне нужно переосмыслить структуру базы данных? Спасибо за любую помощь (или просто за то, что прочитали это далеко!)

user.hbm.xml немного похож на

<set name="clubs" table="userClubs" cascade="save-update">
         <key column="user_ID"/>
         <many-to-many column="activity_ID"
           class="com.ActivityGB.client.domain.Activity"/>
</set>

активность.hbm.xml часть

<set name="members" inverse="true" table="userClubs" cascade="save-update">
        <key column="activity_ID"/>
        <many-to-many column="user_ID"
            class="com.ActivityGB.client.domain.User"/>
</set>

Текущая таблица userClubs содержит поля id | user_ID | activity_ID

Я бы хотел включить туда id | user_ID | активность_ID | роль

и сможете получить доступ к роли с обеих сторон ...

1 Ответ

1 голос
/ 30 апреля 2010

Самый простой способ - создать объект из таблицы соединений.

Вы можете использовать два внешних ключа для клубных и пользовательских объектов в качестве идентификатора (используя), но я бы посоветовал добавить столбец технических идентификаторов и просто установить уникальное ограничение для внешних ключей (в противном случае каскад при сохранении Клуба или Пользователя не будет работать. дополнительная информация здесь: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-compositeid).

Если вы называете свою новую сущность UserClub, вам понадобится один-ко-многим из User в UserClub и из Club в UserClub, а также многие-к-одному из UserClub в Club и из UserClub в User.

У вас будет некоторый рефакторинг для java-кода, но вам не придется менять базу данных (кроме добавления столбцов id и role).

...