2016-04-13 18 views
0

Grails 2.4.3で動的SearchServiceをセットアップして、すべてのドメインクラスの検索に使用しようとしています。Criteria API動的にソートする

ここでは、基準が設定されているクラスにない特定のソートプロパティを解決するために問題に遭遇しています。例については

: 私はプロパティBar barが含まれており、バーが財産String nameを持ってFooクラスを持っています。今度はBarの名前をソートしたいので、ソートパラメータとしてbar.nameサービスに入っています。

このソートパラメータを動的に解決する必要があります。world.nameのようなものも使用できます。

私はthisが見つかりました:どのように任意の提案を

def c = domainClass.createCriteria() 
def list = c.listDistinct { 
     if (sort) { 
      if (sort.contains('.')) { 
       String[] splittedSort = sort.tokenize('.') 
       sort = splittedSort.last() 
       splittedSort = splittedSort[0..-2] 

       splittedSort[0].toString() { 
        order(sort, sortorder) 
       } 
      } else { 
       order(sort, sortorder) 
      } 
     } 
} 

これは動作しません:(

:、私はそれを動的に作ってみました

def criteria = Child.createCriteria(); 
println criteria.list{ 
    parent { 
     order("name") 
    } 
} 

ここに私の方法の一部であります私はこの仕事を得ることができますか?

答えて

0

ダイナミックでメソッドを呼び出すのではなく名前を指定する場合は、条件クエリのエイリアスを使用できます。このように:

def c = domainClass.createCriteria() 
def list = c.listDistinct { 
     if (sort) { 
      if (sort.contains('.')) { 
       String[] splittedSort = sort.tokenize('.') 
       sort = splittedSort.last() 
       splittedSort = splittedSort[0..-2] 

       createAlias(splittedSort.join('.'), 'sortAlias') 
       order("sortAlias.${sort}", sortorder) 
      } else { 
       order(sort, sortorder) 
      } 
     } 
}