2011-07-31 20 views
0

私はあなたが私を助けることを願っています。タスクは、多対多の関係で、私は2 DomainClasses HumanResourceを持っているGoogleが、残念ながら私を助けていなかったし、ここにStackOverflowの私の検索はGrails多対多 - 動的ファインダの問題

:-(にもしませんでした。

モデルの定義:

タスク

class Tasks { 

    String name 

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

HumanResource:私も= {}マッピングにIDフィールドにインデックスを追加しようとしましたが、私もそれが解決策ではないと思う

class HumanResource { 

    String name 

    static hasMany = [tasks: Tasks] 

} 

、それは助けにはならなかったと私は、インデックスには、すでにあると思いますidフィールド。

私がやったことではなく、与えられた仕事のためのすべての人材を見つけることです!そしてタスクはサービスから来ており、それらはすでに "静的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 

} 

私は常にSQL-GrammarExceptionでエラー "org.springframework.dao.InvalidDataAccessResourceUsageException" を取得します。しかし、私は本当に理由を知らない。 "service.getTasks()"オブジェクトは完全に埋められています(fetchMode = [tasks: "eager"]と書いたように)...

誰かが私に勝利のヒントを与えることができたら素晴らしいでしょう。

ありがとうございます。

幸運を祈り、

答えて

0

マルコクエリのこの種のは、サポートされていません - あなたはHQLまたは一般に基準のクエリを使用する必要があるだろう。しかし、この特定のものはあなたが双方向の関係を持っているので簡単です。あなたはこれでTasksの収集のためのHumanResourceインスタンスの全てを取得することができます:

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

あなたはユニークなインスタンスにリストを凝縮する必要があるので、同じHumanResourceインスタンスが複数回表示される場合がありますので、それはSetする必要があります。

+0

ヘイバート、ありがとう、その作品!しかし、私は継続的な質問があります。あなたのソリューションを使用すると、 "HumanResource"モデルが完全に満たされ、多くの不必要な休止状態の選択が実行されます。ソリューションでこれを「除外」する方法、またはソリューションで「収集するもの」をどのように委任できますか?私は** def resources = service.getTasks()を試みました。{humanResources.id; humanResources.firstName;私はヒントを与えることができますか?もう一度おねがいします!Marco(英語) – grailsInvas0r

関連する問題