2011-12-17 114 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

相關問題