В 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"])