如何在 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 中包含另一个页面时,父页面未加载