Grails Gorm - не обычная связь один ко многим - ошибка найдена? - PullRequest
0 голосов
/ 31 августа 2011

Прежде всего: я не новичок в Граале. Я использовал ассоциацию один ко многим много раз. Возможно, проблема возникает из-за того, что это не обычное использование.

код:

class Filter {

      static hasMany = [normal:Result, longerDates:Result, locationReduce1:Result, locationReduce2:Result]
}

class Result {

    int score

    static belongsTo = [user:User, filter:Filter]

    static constraints = {
        user(nullable:false, blank:false)
        score(nullable:false)
}

как видите. Я использую класс "result" 4 раза как ассоциацию один ко многим с одним и тем же классом "filter"

grails создает таблицу «result» с внешним ключом «filter_id» для ссылки на связанный фильтр. Но нет никакой разницы, если это "нормальная" / "longDates" .... ассоциация. В результате, когда я запрашиваю

def results = filter.normal

или

def results = filter.longerDates

я получаю те же результаты. хотя я сохранил результаты правильно

filter.addToNormal (новый результат (..))

и

filter.addToLongerDates (новый результат (..))

Следующее, что я попробовал, было удаление ассоциации принадлежащих к результату из фильтра. Хотя я хотел неявно удалить все результаты фильтра при его удалении ...

результат был "таблицей результатов", как я и хотел. 4 атрибута, называемых «нормальными», «long_dates», «location_Reduce_1» и «location_Reduce_2». когда я сохранял «нормальный» результат, атрибут в таблице содержал идентификатор фильтра, которому принадлежит результат. другие атрибуты (например, longDates "имели нулевое значение). Все идет нормально. странно, что я смог сохранить только ОДИН результат на фильтр, хотя у меня был атрибут has_many в классе «filter»

кто-нибудь знает, что я делаю не так?

1 Ответ

3 голосов
/ 31 августа 2011

Я думаю, вы должны использовать свойство mappedBy в классе Filter

class Filter {

    static hasMany = [normal:Result, longerDates:Result, locationReduce1:Result, locationReduce2:Result]
    static mappedyBy = [normal: "normalFilter", longerDates: "longerDatesFilter", locationReduce1: "locationReduce1Filter", locationReduce2: "locationReduce2Filter"]
}

class Result {
    static belongsTo = [normalFilter: Filter, longerDatesFilter: Filter, locationReduce1: Filter, locationReduce2Filter: Filter]
}

Ссылка здесь

...