я следующее (простое) отображение:JPA (с Hibernate) reatach существующих объектов в @OneToMany -
@Entity
public class Role {
@OneToMany(fetch = FetchType.EAGER) private Set<Privilege> privileges;
}
Я хочу сделать следующее (упрощенно):
- У меня есть создал
Role
(R1) сPrivilege
лица (P1) - Я хочу, чтобы создать другую, новую роль (R2) и дать ему ту же привилегию (P1)
Итак, когда новый R2 создан, он также установлен в Set of Privilege (HashSet not PersistedSet), но содержит существующий P1; Кажется, что Hibernate не в состоянии признать тот факт, что P1 уже существует и правильно упорствовать соотношение
Я уже пытался к следующему:
- сохранить новую роль (R2) с обеими
entityManager.persist
иentityManager.merge
- добавить каскадные = {CascadeType.ALL} для отображения между ролями и правами доступом
- попытался поджать привилегии (таким образом, чтобы объекты существуют в текущем Sess ион) перед сохранением новой роли
Я не пробовал (пока):
- указания
@JoinColumn(name = "PRIV_ID")
на отображение - делать больше операций вручную (например, первый сохраняющиеся пустой Role лица и их обновление Привилегий) - последнее средство
Я думаю, что это довольно стандартная утилита, поэтому, возможно, мне не хватает чего-то, что мешает мне сохранить эту ассоциацию pr operly. Любые идеи? Спасибо.
Хотя диагностика правильная, объяснение неверно: OneToMany может быть однонаправленным (так, без обратной ссылки), и если это так, то по умолчанию стратегия заключается в использовании соединения таблицу, как и со многими для многих ассоциаций (но с уникальным ограничением). –