我有两个域类:

日时间表

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?这是怎么回事?我对这个概念有误吗?

提前致谢。

最佳答案

我认为您确实错误地理解了这个概念。
动态查找器检索被调用的类的对象或对象列表。

因此,在您的示例中,DaySchedule.findAllByTaskIsNotNull()将检索“DaySchedule”类型的对象。

“任务”只是DaySchedule类的String属性,并且您在Schedule类中定义了一个toString方法,该方法返回“Belongs to schedule” ...因此当您在结果上调用println时将打印该内容,因为该类实际上是属于DaySchedule,并且在DaySchedule类上没有toString方法。

因此,如果要改为显示task属性,只需将其添加到DaySchedule类中:

String toString() {
     return this.task
}

10-06 01:18