2012-05-02 9 views
1

が、私は閉鎖「Q」を修正する可能性がどのようにのGrails/Groovyは:GORMドメインクラスで

def q = { 
    property1{ 
    eq('attr', 0) 
    } 
} 

MyDomainClass.list(q) 

を行うことができ、実行時に「クエリ」の閉鎖を変更する(または含むことになり、新しいクロージャを作成します実行時に 'q'を閉じるという制限があります)、例えば別のプロパティ制限を追加できますか?


詳細

実は私の問題は、ドメインクラス階層に複合条件を作成する方法です。 'dummyChildCriteria' は、

class Parent{ 
    int pAttr 

    static def getCriteria(){ 
    def dummyParentCriteria = { 
     eq('pAttr', 0) 
    } 
    } 
} 

class Child extends Parent{ 
    int cAttr 

    static def getCriteria(){ 
    def dummyChildCriteria = { 
     // (1) 
     eq('cAttr', 0) 
    } 
    } 
} 

私は親の制限を繰り返さないようにしたいです。私は名前付きクエリで(1)


ソリューションは

class Parent{ 
    int pAttr 
    static namedQueries = { 
    parentCriteria{ 
     eq('pAttr', 0) 
    } 
    } 
} 

class Child extends Parent { 
    int cAttr 
    static namedQueries = { 
    childCriteria{ 
     parentCriteria() 
     eq('cAttr', 0) 
    } 
    } 
} 

を継承誰かが答えを知っていれば何とかそこに親のgetCriteriaの結果を結合したいと思います

最初の質問はそれが知っていいだろう!

答えて

2

のGrailsの2.0.x以降、あなたは、あなたが一般的な再利用可能な基準のクエリを作成することを可能にするなど、多くの用途を有するDetached Criteria queriesを使用するサブクエリを実行し、バッチ更新を実行することができます/削除します。

分離基準を使用すると、クエリ構成を行うWhere Queriesを使用できます。

def parentCriteria = { 
    pAttr == 0 
} 

def childCriteria = { 
    cAttr == 0 
} 

def parentQuery = Parent.where(parentCriteria) 
def childQuery = Child.where(parentCriteria && childCriteria) 
+0

離脱基準を試しましたが、基準を条件付きで追加する方法を理解できませんでした。例えば、基準閉鎖に私が有することができる:parentCriteria {qc-> IF(qc.a1){EQ(A1 ''、qc.a1を)}(qc.a1){EQ( 'A2'、qc.a2)場合} /*etc...*/}。分離された基準でこれを行うことはできますか? – sikrip

関連する問題