У меня есть разочаровывающая проблема с построением критериев. У меня есть приложение, в котором один пользователь имеет один календарь, а календарь имеет много записей. Кажется достаточно простым, но когда я пытаюсь получить записи календаря для данного пользователя, я не могу получить доступ к свойству пользователя (MissingMethodException). Вот код:Grails: проблема с вложенными ассоциациями в построителе критериев
def getEntries(User user) {
def entries = [ClassName].createCriteria().list() {
calendar {
user {
eq("id", user.id)
}
}
}
}
Я даже попробовал следующий вариант:
def getEntries(User user) {
def entries = [ClassName].createCriteria().list() {
calendar {
eq("user", user)
}
}
}
Это не вызывает исключение, но не работает.
Вот соответствующие части классов домена:
class Calendar {
static belongsTo = [user: User]
static hasMany = [entries: Entries]
...
}
class User {
Calendar calendar
...
}
class Entry {
static belongsTo = [calendar: Calendar]
...
}
Когда Googling я наткнулся на аналогичной проблемой было отмечено в начале 2008 года: http://jira.codehaus.org/browse/GRAILS-1412
Но, по этой ссылке эта проблема должна быть решена давно.
Что я делаю неправильно?
Вы можете включить org.hibernate.SQL отладки Loging и посмотреть, что запрос он работает?Это может помочь выяснить, что происходит не так. – leebutts
Я пробовал, что я получил: Q1: выберите this_.id как id8_0_, this_.version as version8_0_, ... от пользователя this_ where this_.username =? Q2: выберите верх? count (*) as y0_ from entry this_ left внешний календарь календаря calendar_a1_ on this_.calendar_id = calendar_a1_.id где ((calendar_a1_.id =?)) Q3: выберите верхний? this_.id как id3_1_, this_.version как version3_1_, ... from entry this_ left external join calendar calendar_a1_ on this_.calendar_id = calendar_a1_.id где ((calendar_a1_.id =?)) Это кажется мне прекрасным , Есть идеи? (Извините за форматирование, комментарии, похоже, не очень хорошо относятся к коду.) –
Я ничего не вижу о 'where calender.user_id =?' хотя ... – leebutts