Я хочу реализовать иерархию ролей, но довольно новичок в JPA Annotations.JPA Аннотации для отношения «многие ко многим» между объектами одного и того же объекта
У меня есть Role Entity с именем и идентификатор (неявный через AbstractPersistable
):
@Entity
@Table(name="role")
public class Role extends AbstractPersistable<Long> {
private static final long serialVersionUID = 8127092070228048914L;
private String name;
Теперь я хочу, чтобы иметь возможность определить следующие соотношения:
- роль может иметь многие дочерние роли
- роль может быть ребенок много ролей
Как Wou ld Я делаю это с аннотациями Hibernate? Могу ли я определить это внутри объекта роли
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable(name = "role_hierarchy",
joinColumns = { @JoinColumn(name = "role_id")},
inverseJoinColumns={@JoinColumn(name="child_role_id")})
private List<Role> roles;
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable(name = "role_hierarchy",
joinColumns = { @JoinColumn(name = "child_role_id")},
inverseJoinColumns={@JoinColumn(name="role_id")})
private List<Role> children;
Я нахожусь на правильном пути? Что мне не хватает?
Большое спасибо за помощь!
EDIT: - удалено, как это было решено -
EDIT 2:
Похоже, у меня есть некоторые ошибки в моем стеке приложений. На уровне определения модели role_hierarchy работает просто отлично, поэтому никогда не обращайте внимание на EDIT 1 ...
НО: Оба способа, похоже, работают (это создает запись таблицы m: n, каскадное удаление и извлечение родителей и дети для юридического лица):
- мое предложение об определении столбца присоединиться к обеим сторонам, не
mappedBy
собственности на@ManyToMany
аннотацию - , а также определении стороны Обладание и обратную сторону.
В чем разница? Это имеет значение?
Похоже, способ работы, а также шахты (см edit2). Интересно, в чем разница ...? – Pete
@Pete: Без 'mappedBy' вы создаете две однонаправленные отношения вместо двунаправленного sinlge. Я не уверен, как это будет работать, когда две отношения используют одну и ту же таблицу соединений. – axtavt