Самостоятельная ссылка Grails GORM удаляет противоположное направление от ожидаемого - PullRequest
3 голосов
/ 29 марта 2011

У меня есть класс домена Grails, который представляет собой иерархию категорий.У каждой категории есть родительская категория (за исключением корневой категории, которая является нулевой).

class Category {
    String name

    static mapping = {
        cache true
        name index:'category_name_idx'
    }

    static belongsTo = [parent:Category]

    static constraints = {
        parent(nullable:true)
    }
}

Моя проблема: удаляет каскад, полностью противоположный тому, что я ожидал:

  • someSubCategory.delete () удаляет категорию, затем пытается удалить родительскую категорию (что не удается с нарушением целостности, если у родителя есть другие дочерние элементы).
  • parentCategory.delete () НЕ каскадно удаляет своих дочерних элементов, а просто терпит неудачу с нарушением целостности.

Что я делаю не так?Насколько я понимаю, вышеприведенное слово «ownTo» должно указывать GORM каскадное удаление от родительского элемента ко всем дочерним элементам, но не от дочернего к его родительскому элементу.

Ответы [ 2 ]

6 голосов
/ 29 марта 2011

Если я правильно понимаю, что Категория принадлежит родителю, и у родителя может быть несколько детей, поэтому я думаю, что вам нужны отношения hasMany, что-то вроде этого:

class Category {
    String name

    static mapping = {
        cache true
        name index:'category_name_idx'
    }

    static belongsTo = [parent:Category]
    static hasMany = [children: Category]

    static constraints = {
        parent(nullable:true)
    }
}

У меня были похожие структуры, и у меня никогда не было проблем с удалением, которые делали это так.

Надеюсь, это поможет!

1 голос
/ 29 марта 2011

Это не ответ, но я нашел обходной путь к своему собственному вопросу.Вы можете удалить assignTo = [parent: Category], заменив его простой переменной экземпляра.Это останавливает subCategory.delete () от каскадного к родительскому.

class Category {
    String name
    Category parent

    static mapping = {
        cache true
        name index:'category_name_idx'
    }

    static constraints = {
        parent(nullable:true)
    }
}
...