通过外键列对GORM查询结果进行排序

时间:2015-07-16 10:06:05

标签: grails gorm

我有一个完全映射在Grails中的外键关系,比方说:

class Hero {
    Long id
    String name
    Long experience

    Pet pet
    .....
}

class Pet {
    Long id
    String name
    Long ownerId
    .....
}

让我们说我想查询所有Hero,他们将Pet命名为“Hiccup”。所以我将对Hero类执行查询:

def matching = Hero.findAll {
    ilike('pet.name', '%Hiccup%')
}

它有效!问题是如何根据List的{​​{1}}列对返回的Pet进行排序?我试过了:

Name

但它返回错误:

def matching = Hero.findAll {
    ilike('pet.name', '%Hiccup%')
    orderBy('pet.name', 'asc')
}

谢谢。

1 个答案:

答案 0 :(得分:1)

试试这个:

def matching = Hero.withCriteria {
    pet {
       ilike('name', '%Hiccup%')
       orderBy('name', 'asc')
    }
}

或者相反:

def matching = Pet.withCriteria {
    projections {
        property('hero')
    }
    ilike('name', '%Hiccup%')
    orderBy('name', 'asc')
}

但这只适用于宣布宠物< - >英雄与grails命令的关系。我不知道这是一对一/一对多

它应该是这样的(一对一):

class Hero {
    Long id
    String name
    Long experience

    static hasOne = [pet:Pet]
    .....
}

class Pet {
    Long id
    String name
    Long ownerId
    .....

    static belongsTo = [hero:Hero]
}