2010-10-29 2 views
0

У меня есть фрагмент кода, который «обновляет» запись в базе данных с помощью первого каскада, удаляя ее, а затем заменяя ее новым объектом, потому что у меня было много проблемы, связанные с его обновлением. Этот хак работал нормально, пока я не начал использовать некоторые отношения 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 делает соединение, кажется, у меня нет доступа к нему. Я просто слишком упрям ​​и должен ли я использовать обновление вместо того, чтобы сначала пытаться удалить запись перед входом в новую, или есть ли другой способ сделать эту работу? Может быть, есть какая-то аннотация, чтобы сделать каскад впавшим в соединение и не дальше? Идеи?

ответ

1

Вы пытались удалить PDBEntry из pdbEntrySet и/или наоборот перед выполнением вызова для удаления PDBEntry?

+0

Отлично, это сделал трюк! – FinalArt2005

Смежные вопросы