Закрытие Grails findAll объединяет запрос с полем hasmany

Согласно приведенным ниже классам доменов

VisitSchedules{
    Visit visit
    static hasMany = [users: User]
    ...
}

Visit{
    DateTime startTime
    ...
}

Я хочу запросить у VisitSchedules посещения, запланированные для пользователя на будущую дату. что-то вроде ниже

def upcomingVisitSchedules = VisitSchedules.findAll {
    visit.startTime >= new DateTime() && users.contains(user)//How do I query if the users list contains the current user?
}

person user3846586    schedule 01.03.2015    source источник


Ответы (2)


и... Строительство VisitSchedules.findAll, VisitSchedules.where и VisitSchedules.withCriteria не являются самодостаточными и ненадежными. Всегда используйте конструкцию VisitSchedules.createCriteria().

class VisitScheduleService {

   def springSecurityService

   void run{
    SecUser currentUser = springSecurityService.currentUser

    def upcomingVisitSchedules = VisitSchedules.createCriteria().list() {
       and {
          visit {
             le('startTime', new DateTime())
          }
          eq('user', currentUser)
       }
    }  
  }

}
person igilfanov    schedule 01.03.2015

спасибо за ваш ответ, это очень помогло, вот как это выглядит сейчас.

class VisitScheduleService {
    def springSecurityService
    void run{
        SecUser currentUser = springSecurityService.currentUser
        def upcomingVisits = VisitScheduleNotification.createCriteria().list(){
            and{
                visit{
                    ge('startTime', new DateTime())
                }
                users{
                    eq('id', user.id)
                }
            }
        }
    }
}

У меня есть один вопрос: Вопрос: я пытался использовать метод критериев 'in'("users",user) для поиска пользователя в свойстве static hasMany = [users: User].

def upcomingVisits = VisitScheduleNotification.createCriteria().list(){
            and{
                visit{
                    ge('startTime', new DateTime())
               }
               'in'('users', user)
            }
        }

но не смог добиться того, что мне нужно?

person user3846586    schedule 01.03.2015