如何使用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,但我需要完整的对象