, имеющих отношение m: n реального мира между некоторыми объектами, например. user < ---> group Теперь я хочу смоделировать эту взаимосвязь и хранить дополнительную информацию на ее основе, например. поле «качество».JPA: Моделирование m: n отношений и значений таблицы соединений
Я слышал, что я должен был бы создать новую таблицу соединения user_group следующим образом:
id | user_ref | group_ref | quality
----------------------------------
1 1 1 0.5
2 1 2 1.3
... ... ... ...
Соответствующее лицо имеет два взаимосвязанных лиц (частных пользователей) пользователя и группы, аннотированный с @ManyToOne - аннотаций. С другой стороны, у моего пользователя и моей группы есть набор связанных объектов user_group, как частных, так и объявленных с помощью @OneToMany -nnotation.
У меня есть три вопроса:
- это правильный способ смоделировать проблему дополнительных полей в JPA 2.0?
- Мне не разрешено использовать пользователя и группу в user_group как первичный ключ , так как они недопустимы для первичных ключей. Это действительно необходимо, чтобы объявить новый первичный.
- Является ли это обычным рабочим процессом с этими таблицами/сущностями?
...
EntityManager em = ...
...
em.getTransaction().begin();
User u = new User("Pete");
Group g = new Group("Anonymous workaholics")
UserGroup ug = new UserGroup();
ug.addUser(u);
ug.addGroup(g);
em.persist(u); em.persist(g); em.persist(ug);
em.getTransaction().commit();
em.close()
Спасибо большое!
Хорошо спасибо за ваш ответ в киберпространстве :) Позвольте мне подтвердить пункт 3: он должен быть установлен, поскольку это простой метод сеттера. –
Да, точно. addXY используется для добавления XY в коллекцию XY. У вас нет сцепления здесь, а есть один атрибут. –
Только для справки: http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany#Mapping_a_Join_Table_with_Additional_Columns – miguelcobain