它可以执行一个查询:如何从另一个查询结果
def c = DomainClass.createCriteria()
def results = c.list {
ge("property1", params.param1.toInteger())
le("property2", params.param2.toFloat())
}
我们要添加一个条件:
尝试1)前到个createCriteria:
def preResults = DomainClass.getAllByProperty3GreaterThan(0)
def c = preResults.createCriteria()
...
它给出了错误:没有方法的签名:java.util.ArrayList.createCriteria()适用于参数类型:()values:[]
尝试2)个createCriteria后:
...
postResults = results.getAllByProperty3GreaterThan(0)
它给出了错误:否方法的签名:java.util.ArrayList.getAllByProperty3GreaterThan()是适用于参数类型:(java.lang中.Integer)值:[0]
不包括createCriteria中所有内容的原因是preResults(或postResults)是Service的函数的结果...我在此省略了Service(并更改了变量的名称bles)来简化。
我不明白第一个想法@ zoran119。你能举个例子吗?第二个想法应该能够工作(如果我能够将指定的查询从Controller传递到服务),但它看起来不是为此目的而做的......:/ – chelder
您不需要传递指定的查询从控制器到服务。您只需在域类中声明指定的查询(按照我链接的文档),并简单地在服务中使用它:'DomainClass.myNamedQuery.findAllByProperty3GreaterThan(0)'。 – zoran119
第一个想法是这样的......首先做'def c = DomainClass.createCriteria()',然后'def results = c.list {/ * stuff * /}',最后'def filteredResults = results。 findAll {it.property3}'。请注意,如果it.property3的值大于零(只是写'it.property3> 0'的简写方式),它将返回“true”。 – zoran119