【问题标题】:Grails domain Named query for a list用于列表的 Grails 域命名查询
【发布时间】:2016-01-12 04:28:04
【问题描述】:

我有一个简单的 Grails 应用程序。我有几个域,例如以下。场景是 Person 有很多电话(但 person 类没有电话列表作为变量:Lazy Single-Ended Associations)。

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 以满足我的要求

提前致谢

【问题讨论】:

    标签: grails grails-orm named-query domain-object


    【解决方案1】:

    我相信它能够看到你是正确的人的电话

    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()
    

    【讨论】:

      【解决方案2】:

      我会坚持使用单端 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   
      

      【讨论】:

        猜你喜欢
        • 2016-01-13
        • 2012-04-17
        • 1970-01-01
        • 2016-01-14
        • 2015-07-28
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        相关资源
        最近更新 更多