1

gorm ドメイン クラスでは、次のことができます。

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

MyDomainClass.list(q)

たとえば、別のプロパティ制限を追加できるように、実行時にクロージャー 'q' を変更する (またはクロージャー 'q' が持つ制限を含む新しいクロージャーを作成する) にはどうすればよいですか?


詳細

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

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)
    }
  }
}

「dummyChildCriteria」では、親の制限を繰り返さないようにしたい。

親の getCriteria の結果を何らかの方法で結合したいと思います (1)


名前付きクエリの継承によるソリューション

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

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

しかし、誰かが最初の質問に対する答えを知っているなら、それを知っておくといいでしょう!

4

1 に答える 1

2

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

Detached Criteriaを使用すると、クエリ作成を行うWhereQueriesを使用できます。

def parentCriteria = {
    pAttr == 0
}

def childCriteria = {
    cAttr == 0
}

def parentQuery = Parent.where(parentCriteria)
def childQuery = Child.where(parentCriteria && childCriteria)
于 2012-05-02T22:18:22.323 に答える