Grails域列表

时间:2015-10-14 07:35:17

标签: grails gorm named-query domain-object

我有一个简单的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 个答案:

答案 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}}