JPA Аннотации для связи «многие ко многим» между объектами одной и той же сущности
Я хочу реализовать иерархию ролей, но я довольно новичок в аннотациях JPA.
У меня есть ролевая сущность с именем и идентификатором (неявно черезAbstractPersistable
):
@Entity
@Table(name="role")
public class Role extends AbstractPersistable<Long> {
private static final long serialVersionUID = 8127092070228048914L;
private String name;
Теперь я хочу иметь возможность определить следующие отношения:
Роль может иметь много дочерних ролейРоль может быть дочерней ко многим ролямКак бы я сделал это с аннотациями 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;
Я на правильном пути? Чего мне не хватает?
Спасибо большое за вашу помощь!
РЕДАКТИРОВАТЬ: - снято как было решено -
РЕДАКТИРОВАТЬ 2:
Похоже, у меня есть ошибка в стеке приложений. На уровне определения модели role_hierarchy работает просто отлично, так что не обращайте внимания на EDIT 1 ...
НО: кажется, что оба способа работают (то есть создание записи таблицы m: n, каскадное удаление и извлечение родителей и потомков для объекта):
мое предложение об определении столбца соединения для обеих сторон безmappedBy
собственность на@ManyToMany
аннотированиеа также определение владеющей стороны и обратной стороны.Какая разница? Это имеет значение?