【问题标题】:How do I search for elements whose collection contains another element in Grails?如何在 Grails 中搜索集合中包含另一个元素的元素?
【发布时间】:2012-02-15 07:16:31
【问题描述】:

假设我有一个名为“用户”的域类,它可以跟随其他“用户”对象。它这样做有一个字段指定为:

def hasMany=[followedUsers:User]

我需要在不设置反向关系的情况下进行反向操作(查找特定用户对象之后的所有用户对象),因为它不是经常执行的用例。我试图做这样的事情,使用闭包:

User.findAll { it.followedUsers.contains(userInstance) }

但这总是返回数据库中的所有用户,无论他们的关注状态如何。我尝试使用 HQL,但也失败了。

谁能给我一个关于完成此任务的最简单方法的快速指示?谢谢。

【问题讨论】:

    标签: grails collections grails-orm


    【解决方案1】:

    您可以使用此 HQL 查询:

    User.executeQuery(
       'select u from User u where :follower in elements(u.followedUsers)',
       [follower: userInstance])
    

    【讨论】:

    • 非常感谢。我最终做了def followers = User.findAll("from User where ? in elements(followedUsers)", [userInstance])。我之前实际上曾尝试过此解决方案,但错过了完成它的 elements() 调用。
    【解决方案2】:

    在我看来,这种语法更简洁:

    User.withCriteria { followedUsers{ eq('id', userInstance.id) } }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 2011-05-03
      • 2012-03-31
      • 1970-01-01
      • 2021-12-08
      • 2010-11-20
      • 1970-01-01
      相关资源
      最近更新 更多