Домен Grails Именный запрос для списка
У меня есть простое приложение Grails. У меня есть пара доменов, таких как следующие. Сценарий "Человек имеет много телефонов" (но у класса "Человек" нет списка телефонов в качестве переменной: "Ленивые однозначные ассоциации").
class Person implements Serializable {
....
}
class Telephone implements Serializable{
String number
static belongsTo = [person : Person]
static mapping = {
.....
person lazy: false
}
}
Теперь у меня есть требование, где я должен искать человека по телефонам. У меня есть список телефонных номеров. Мне нужно получить всех людей, у которых есть хотя бы один номер этого телефона. Мне нужно написать namedQueries, но я новичок в этой области. Можно ли написать именованные запросы для этого? Или мне нужно отображение, определенное в классе Person как
set telephone
static hasMany = [
telephone: Telephone
]
И как определить namedQueries в соответствии с моими требованиями
заранее спасибо
2 ответа
Я верю, что он сможет увидеть телефон от человека, которого вы правы, что
set telephone
static hasMany = [
telephone: Telephone
]
должен быть определен, но после определения вы можете просто сделать:
static namedQueries = {
withSameTelephone {telephoneNumber ->
telephone{ eq 'number' telephoneNumber }
}
}
и используйте это как:
Person.withSameTelephone('091511234512').list()
Я думаю, что вам нужно передать список так
static namedQueries = {
withSameTelephoneInList {telephoneNumberList ->
telephone{ 'in'( 'number' telephoneNumber) }
}
}
так что вы могли бы сделать:
Person.withSameTelephoneInList(['091511234512','091511234513','091511234514']).list()
Я бы придерживался одностороннего o2m и поместил бы именованный запрос как:
class Telephone {
...
static namedQueries = {
byPerson{ Person p ->
eq 'person', p
}
}
}
и назовите это как:
Person p = Person.get 1111
def telephones = Telephone.byPerson p
С другой стороны, вы можете использовать простой findAllBy*
запрос:
Person p = Person.get 1111
def telephones = Telephone.findAllByPerson p