Возможно, я неправильно понимаю ваш вопрос, потому что не могу разобраться в части вашего кода.Это кажется ненужным.Если ваши отношения настроены правильно (т. Е. Проект принадлежит Сотруднику), этого должно быть достаточно для удаления одного проекта:
def delete = {
def projectInstance = Project.get( params.id )
projectInstance.delete(flush:true)
flash.message = "Project ${params.id} deleted"
redirect(action:"edit", controller: "employee", id: employee.id)
}
Если это один ко многим, в следующий раз, когда вы получите сотрудника,Проект исчезнет.И это должно работать, чтобы удалить все проекты сотрудника:
def delete = {
def employee = Employee.get( params.id )
employee.getProjects().clear()
employee.save(flash:true)
flash.message = "All projects of employee deleted."
redirect(action:"edit", controller: "employee", id: employee.id)
}
Это предполагает каскад: "all-delete-orphan".Если это не так, то вам может понадобиться удалить экземпляры, и это может выглядеть примерно так:
def delete = {
def employee = Employee.get( params.id )
// Make copy to avoid concurrent modification issues later
def copy = new TreeSet<Project>(employee.getProjects());
employee.getProjects().clear();
employee.save(flash:true)
copy.each{
$it.delete();
}
flash.message = "All projects of employee deleted."
redirect(action:"edit", controller: "employee", id: employee.id)
}
Я не отличный специалист, поэтому не уверен, нужна ли копия, или еслиВы можете просто перебирать коллекцию напрямую.Кажется, что всегда есть отличный способ сделать что-то.Вы также можете проверить метод динамического домена класса deleteFrom .Это может быть более эффективный подход grails в зависимости от количества удаляемых связей.