Как в этом случае findAllBy * работает? - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть два класса домена:

Расписание дня

class DaySchedule {
    Date Todaysdate
    String startTime;
    String endTime;
    String task
    int priority 
    boolean completed
    static belongsTo = [ schedule : Schedule ]
}

Расписание :

class Schedule {
    Date date;
    static belongsTo = [ user : User ]
    static hasMany = [ daySchedules : DaySchedule ]
        static constraints = {
        date(blank:false)
        }
        String toString() {
              "Belongs to schedule"
    }
}

Сейчас,когда я запрашиваю класс DaySchedule с findAllByTaskIsNotNull(), я ожидаю, что он вернет все task на DaySchedule, но вместо этого я получаю "Belongs to schedule" в качестве результата моего запроса.Вот так

def allTasks = DaySchedule.findAllByTaskIsNotNull()
//returns "Belongs to schedule"

Если я сделаю еще один шаг и запросю allTasks, я получу все task, как и ожидалось.Вот так:

def expected = allTasks.task
println expected //prints all tasks!

Я не мог понять поведение findAllByTaskIsNotNull().Таким образом, мой фактический вопрос findAllByTaskIsNotNull() должен вернуть все task, верно?Почему он находит свой подходящий Schedule?В чем дело?Я неправильно понял концепцию?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Я думаю, вы действительно неправильно поняли эту концепцию. Динамические искатели извлекают объекты или списки объектов класса, к которому они обращаются.

Итак, в вашем примере DaySchedule.findAllByTaskIsNotNull () будет получать объекты типа "DaySchedule".

«task» - это просто свойство String вашего класса DaySchedule, и вы определили метод toString в своем классе Schedule, который возвращает «Принадлежит расписанию» ... так вот что выводится на печать, когда вы вызываете println для ваших результатов, потому что этот класс на самом деле принадлежит DaySchedule, и в вашем классе DaySchedule нет метода toString.

Так что если вы хотите, чтобы вместо этого отображалось свойство задачи ... просто добавьте это в свой класс DaySchedule:

String toString() {
     return this.task
}
1 голос
/ 18 декабря 2011

Ваш код содержит ошибки, потому что метод toString является закрытием INSIDE static contraints, поэтому я не удивлюсь, что у вас есть побочный эффект в вызове toString.Попробуйте исправить код, поместив toString за пределы замыкания, и дайте мне знать

Более того, просто посмотрите имя метода: findAll -> By <--- TaskIsNotNull, это означает, что он найдет DyaSchedule, которыйне имеет нулевых задач, поэтому ответ в порядке.</p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...