在Grails中,如何根据其鉴别器在DB中搜索某些内容?

时间:2012-12-06 02:59:17

标签: grails discriminator grails-2.0.4

假设我有以下课程:

abstract class Fruit {
    String name

    static mapping = {
        discriminator column: 'type'
    }

class Banana extends Fruit {
    static mapping = {
        discriminator: 'Banana'
    }
}

class Apple extends Fruit {
    static mapping = {
        discriminator: 'Apple'
    }
}

我需要实现一个搜索算法,这样,给定一个JSON字符串,我可以在DB中找到一个特定的Fruit实例。例如:

{
    "type": "Apple"
    "name": "Green"
}

{
    "type": "Banana"
    "name": "Green"
}

问题是,水果可以有相同的名称,所以如果我只是搜索一下:

Fruit.getByName('Green')

可能会返回AppleBanana。我需要能够根据类型对其进行过滤,例如:

Fruit.getByNameAndType('Green', 'Apple')

如何在Grails中执行此操作?

3 个答案:

答案 0 :(得分:2)

查看生成的数据库。

您可以在Fruit类的条件搜索中使用class列。

也许这可以作为

   Fruit.findAllByColorAndClassLike('Green','%Apple')

答案 1 :(得分:0)

Apple.getByName('Green')

应该有效。你试过了吗?

答案 2 :(得分:0)

这是否符合您的需求?

def fruits = Fruit.findAll("from Fruit where type = :type and name = :name", [type: "Apple", name: "Green"])