В Grails, как мне искать что-то в БД на основе ее дискриминатора?

Допустим, у меня есть следующие классы:

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 я мог найти конкретный экземпляр Fruit в БД. Например:

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

или же

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

Проблема в том, что фрукты могут иметь одно и то же имя, поэтому, если я просто поищу это:

Fruit.getByName('Green')

Это может вернуть Apple или Banana, Мне нужно иметь возможность фильтровать его по типу, а также по типу, что-то вроде:

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

Как мне сделать это в Grails?

3 ответа

Посмотрите на сгенерированную базу данных.

Там будет class столбец, который вы можете использовать при поиске по критерию в вашем классе Fruit.

Может быть, это работает как

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

тоже

Должно ли это удовлетворить ваши потребности?

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

Должно сработать. Вы пробовали это?

Другие вопросы по тегам