2011-12-17 111 views
0

我有两个领域类:在这种情况下,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()我希望它返回所有taskDaySchedule,但我得到"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

有任何人来回答这个问题? – 2011-12-19 01:27:22

回答

2

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

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

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

所以,如果你想拥有,而不是显示的任务属性...只是添加到您的DaySchedule类:

String toString() { 
    return this.task 
} 
1

你的代码是有缺陷的,因为toString方法是INSIDE static contraints闭包,所以我不会惊讶你在toString调用中有一些副作用。尝试修复代码将toString封闭之外,让我知道

此外,只看方法名的形式findAll - >通过< --- TaskIsNotNull,这意味着它会发现,有没有空任务DyaSchedule ,所以答案是好的。

+0

对不起,这是一个错字。我仍然得到和以前一样的答案。 – 2011-12-18 02:02:08

+0

更多的答案 – fixitagain 2011-12-19 13:00:16

相关问题