在这种情况下,findAllBy *是如何工作的?
我有两个领域类:在这种情况下,findAllBy *是如何工作的?
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
?这是怎么回事?我错误地理解了这个概念吗?
在此先感谢。
我想你确实错误地理解了这个概念。 动态查找器检索被调用的类的对象或对象列表。
因此,在您的示例中,DaySchedule.findAllByTaskIsNotNull()将检索“DaySchedule”类型的对象。
“task”只是DaySchedule类的String属性,并且您在Schedule类中定义了一个toString方法,该方法返回“Belong to schedule”...因此,当您在结果上调用println时会打印它因为该类实际上属于DaySchedule,并且DaySchedule类中没有toString方法。
所以,如果你想拥有,而不是显示的任务属性...只是添加到您的DaySchedule类:
String toString() {
return this.task
}
你的代码是有缺陷的,因为toString
方法是INSIDE static contraints
闭包,所以我不会惊讶你在toString调用中有一些副作用。尝试修复代码将toString
封闭之外,让我知道
此外,只看方法名的形式findAll - >通过< --- TaskIsNotNull,这意味着它会发现,有没有空任务DyaSchedule ,所以答案是好的。
对不起,这是一个错字。我仍然得到和以前一样的答案。 – 2011-12-18 02:02:08
更多的答案 – fixitagain 2011-12-19 13:00:16
有任何人来回答这个问题? – 2011-12-19 01:27:22