我有一个简单的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以满足我的要求
提前致谢
答案 0 :(得分: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()
答案 1 :(得分:0)
我坚持使用单端o2m,然后输入一个命名查询:
Person p = Person.get 1111
def telephones = Telephone.byPerson p
并称之为:
findAllBy*
另一方面,您可以使用简单的Person p = Person.get 1111
def telephones = Telephone.findAllByPerson p
查询:
{{1}}