У меня есть фрагмент кода, который «обновляет» запись в базе данных с помощью первого каскада, удаляя ее, а затем заменяя ее новым объектом, потому что у меня было много проблемы, связанные с его обновлением. Этот хак работал нормально, пока я не начал использовать некоторые отношения ManyToMany. Это проблема, которая создает проблемы:Как каскад удалить запись без каскадирования в отношения ManyToMany
@ManyToMany(cascade = CascadeType.ALL)
private Set<RefProg> refProgSet = new HashSet<RefProg>();
Он находится в доменном объекте под названием PDBEntry. Объект домена RefProg имеет следующий фрагмент кода:
@ManyToMany(mappedBy = "refProgSet")
private Set<PDBEntry> pdbEntrySet = new HashSet<PDBEntry>();
Теперь, как вы могли догадаться, это идет ужасно неправильно, когда вы пытаетесь удаление PDBEntry. Скажем, PDBEntry «ENT1» имеет RefProg «REFPROG1», а PDBEntry «ENT2» имеет тот же RefProg. Теперь, когда я пытаюсь выполнить каскадное удаление «ENT1», он также пытается удалить «REFPROG1», что должно быть невозможно, поскольку оно все еще связано с «ENT2». Но если я не установлю RefProg на каскадное удаление, он не удалит связанные строки в соединении, которые Hibernate строит для меня, давая мне ошибку, что он не может удалить PDBEntry. И поскольку Hibernate делает соединение, кажется, у меня нет доступа к нему. Я просто слишком упрям и должен ли я использовать обновление вместо того, чтобы сначала пытаться удалить запись перед входом в новую, или есть ли другой способ сделать эту работу? Может быть, есть какая-то аннотация, чтобы сделать каскад впавшим в соединение и не дальше? Идеи?
Отлично, это сделал трюк! – FinalArt2005