我有两个域类:
DaySchedule
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
?这是怎么回事?我错误地理解了这个概念吗?
提前致谢。
答案 0 :(得分:2)
我认为你确实错误地理解了这个概念。 动态查找程序检索正在调用它们的类的对象或对象列表。
因此,在您的示例中,DaySchedule.findAllByTaskIsNotNull()将检索“DaySchedule”类型的对象。
“task”只是DaySchedule类的String属性,并且您在Schedule类中定义了一个toString方法,该方法返回“属于计划”...这样当您在结果上调用println时会打印出来的内容该类实际上属于DaySchedule,而DaySchedule类上没有toString方法。
因此,如果您希望显示任务属性,请将其添加到DaySchedule类中:
String toString() {
return this.task
}
答案 1 :(得分:1)
你的代码有缺陷,因为toString
方法是INSIDE static contraints
闭包,所以我不会对你在toString调用中产生一些副作用感到惊讶。尝试修复将toString
置于闭包之外的代码并让我知道
此外,只需查看方法名称:findAll - >通过< --- TaskIsNotNull,这意味着它将找到没有空任务的DyaSchedule,所以答案是可以的。