Grails:findAllWhere sort/max/offset操作符don';行不通

Grails:findAllWhere sort/max/offset操作符don';行不通,grails,dynamic-finders,Grails,Dynamic Finders,我知道grails中的动态查找器只支持2个参数 例如 因此,使用3个以上的参数,我发现这是可行的。但是,我需要使用max和offset操作符 artifacts = Artifact.findAllWhere(document:document,artifactType:artifactType,status:null,[max:limit, offset:startIndex]); 但是,这将返回整个列表,而不是请求的限制。操作员在findAllwhere工作吗?如何使用它或将我的发现限制在

我知道grails中的动态查找器只支持2个参数 例如

因此,使用3个以上的参数,我发现这是可行的。但是,我需要使用max和offset操作符

artifacts = Artifact.findAllWhere(document:document,artifactType:artifactType,status:null,[max:limit, offset:startIndex]);

但是,这将返回整个列表,而不是请求的限制。操作员在findAllwhere工作吗?如何使用它或将我的发现限制在一定范围内?

您可以使用具有两个以上参数的动态查找器。您应该尝试以下动态查找程序:

Artifact.findAllByDocumentAndArtifactTypeAndStatusIsNull(document, artifactType, [max:limit,offset:startIndex]) 

希望这会有所帮助

我找到了一个更优雅的解决方案,它不需要输入超长的动态助手

可以将findAll与闭包一起使用,如下所示:

artifacts = Artifact.findAll([max:limit, offset:startIndex]) {
      document == document
      artifactType == artifactType
      status == null
}

为什么说grails只支持2个参数?来自文档:“方法表达式还可以使用布尔运算符组合两个或多个条件”。Grails的版本是什么?2.4.1。以前有过,但我觉得很奇怪。你应该试试这个动态的finders:Artifact.findAllByDocumentAndArtifactTypeAndStatusIsNull(document,artifactType,[max:limit,offset:startIndex]),我刚刚添加了这个注释作为其他用户的答案。您能验证我的答案吗?我们在2.0中对此进行了更改,允许不限数量的arg,只要它们都与“And”或“all”或“or”组合在一起。这种限制是人为的,只是为了防止方法名失控。但是有几个请求,所以我们决定,如果你想要长得离谱的名字,就去吧。如果你想减少生活中的混乱,可以使用
findWhere
、条件查询、“where”查询或HQL。谢谢你的推荐。在我这方面,我的限制通常是3。使用长动态查找程序是否会降低性能?运行时性能不是像
findallbydocument和artifacttypeandstatusisnull这样的错误方法名的问题。开发时间性能是个问题。人类必须非常仔细地查看该方法名称,以确定标准是什么。
artifacts = Artifact.findAll([max:limit, offset:startIndex]) {
      document == document
      artifactType == artifactType
      status == null
}