如何使用grailsgorm获得不同的结果

如何使用grailsgorm获得不同的结果,grails,gorm,Grails,Gorm,两个对象之间有一对多的关系。比如订单和物品 class Order { static hasMany = [items: ItemModel] ...//some properties } class ItemModel { // some properties } class SearchController { def doSearch() { def criteriaOrder = Order.createCriteria(); de

两个对象之间有一对多的关系。比如订单和物品

class Order {
   static hasMany = [items: ItemModel]
   ...//some properties
}

class ItemModel {
   // some properties
}

  class SearchController {
   def doSearch() {
      def criteriaOrder = Order.createCriteria();
      def order =  criteriaOrder.list(params) {
         and {
            items {
               like("partNumber", itemName)
            }
            or {
               if (customerName){
                  like('bclientName', customerName)
                  like('dclientName',customerName)
               }
            }
            if (fromDate && toDate) {
               between('orderDate', fromDate,toDate)
            }
         }
      }
     }
   }
当我要搜索时,它会给出重复的结果。我在列表对象上使用了unique(),但分页不起作用。

添加到查询:

基于不同的解决方案:

def order =  criteriaOrder.list(params) {
     projections{ 
       distinct 'id'
       property 'bclientName'
       property 'dclientName'
       property 'orderDate'
       // add further props you need to show in the list
     }
     and {
        items {
           like("partNumber", itemName)
        }
  ....
}.collect{ 
  Order o = new Order( bclientName:it[ 1 ], dclientName:it[ 2 ], orderDate:it[ 3 ] ) 
  o.id = it[ 0 ]
  o
}
def order =  criteriaOrder.list(params) {
     projections{ 
       groupProperty 'id'
       max 'orderDate'
     }
     and {
        items {
           like("partNumber", itemName)
        }
  ....
}
基于groupBy的解决方案:

def order =  criteriaOrder.list(params) {
     projections{ 
       distinct 'id'
       property 'bclientName'
       property 'dclientName'
       property 'orderDate'
       // add further props you need to show in the list
     }
     and {
        items {
           like("partNumber", itemName)
        }
  ....
}.collect{ 
  Order o = new Order( bclientName:it[ 1 ], dclientName:it[ 2 ], orderDate:it[ 3 ] ) 
  o.id = it[ 0 ]
  o
}
def order =  criteriaOrder.list(params) {
     projections{ 
       groupProperty 'id'
       max 'orderDate'
     }
     and {
        items {
           like("partNumber", itemName)
        }
  ....
}

是的,它在结果中提供id,但我想获得Order对象您需要完整的对象作为列表呈现,还是只需要几个字段?完整的Order对象列表根据投影,它提供所有id,但我需要对象直到我只获得Order的对象id,但我需要完整的对象