如何在 Grails 中搜索集合中包含另一个元素的元素?

Posted

技术标签:

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

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

def hasMany=[followedUsers:User]

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

User.findAll  it.followedUsers.contains(userInstance) 

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

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

【问题讨论】:

【参考方案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)  

【讨论】:

以上是关于如何在 Grails 中搜索集合中包含另一个元素的元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 cmake 项目中包含另一个 cmake 项目的头文件?

Tomcat 在 web.xml 中包含另一个 xml 文件

在 php codeigniter 中包含另一个页面时,父页面未加载

在 HTML 文件中包含另一个 HTML 文件 单页应用程序

模板中包含另一个 var 内容的动态 var 名称

如何在 Grails 中包含 jquery.js?