2011-07-31 18 views
0

我希望你能幫助我。谷歌很遺憾沒有幫助我走出這裏我的搜索在計算器沒有以及:-(Grails多對多 - 動態查找器的問題

我有兩個DomainClasses HumanResource任務有許多一對多的關係。

模型定義:

任務

class Tasks { 

    String name 

    static belongsTo = [HumanResource] 
    static hasMany = [humanResources: HumanResource] 
    //also tried but didn't help -> static fetchMode = [humanResources:"eager"] 
} 

HumanResource

class HumanResource { 

    String name 

    static hasMany = [tasks: Tasks] 

} 

我也試圖與映射的id字段添加一個索引= {}但我也認爲這不是解決方案,它並沒有幫助,我想已經有一個索引id字段。

所以,我做了什麼,沒有成功,現在是爲給定的任務找到所有的人力資源!這些任務來自服務,並且它們已經在服務模型中用「static fetchMode = [tasks:」eager「]」獲取!

控制器的代碼:

def listHumanResourcesFromTasks = { 
     def list = HumanResource.findAllByTasks(service.getTasks()) 

     //and I tried also with an own HashMap but didn't work as well 

} 

我總是得到一個錯誤 「org.springframework.dao.InvalidDataAccessResourceUsageException」 與SQL-GrammarException。但我真的不知道爲什麼。 「service.getTasks()」對象被完全填充(正如我用fetchMode = [tasks:「eager」]寫的)...

如果有人能給我贏得提示,那將是非常棒的。

非常感謝您的時間。

最良好的祝願,

馬爾科

回答

0

這類查詢不支持 - 你需要使用HQL或一般條件查詢。但是這個特別的一個很容易,因爲你有雙向關係。你可以得到所有的HumanResource實例爲Tasks這個集合:

def resources = service.getTasks().collect { it.humanResources }.flatten() as Set 

它需要一個Set因爲如此,你需要凝結成列表唯一實例相同HumanResource實例可能出現多次。

+0

嘿伯特,非常感謝,這工作!但我有一個連續性問題。如果我使用你的解決方案,「人力資源」模型會被完整填充,並且會執行大量不必要的休眠選擇。我怎樣才能用你的解決方案「排除」這個問題,或者我怎樣才能將「收集什麼」委託給你的解決方案?我試過** def resources = service.getTasks()。collect {humanResources.id; humanResources.firstName;人力資源。新名稱} .flatten()作爲設置**,但與此我得到(在5資源的情況下)15結果無序和彼此不相關:-(你能給我一個提示嗎?再次感謝!馬可 – grailsInvas0r