Groovy中的动态命名参数?

时间:2014-06-10 14:30:27

标签: sql hibernate grails groovy

我发现很酷,在Groovy SQL中可以这样做:

def resultList = Domain.executeQuery('select * from languages where name = :name', [name: 'Groovy'])

我正在努力获得HQL""使用动态列表作为参数的关键字,而不是固定列表。

我也知道你可以使用"?"您的SQL参数的运算符,而不是使用命名参数。但是根据这个问题:

Doing an "IN" query with Hibernate

" in"关键字仅支持命名和位置参数,而不支持"?"参数。问题是,当我尝试做这样的事情时:

def paramMap = [:]
paramMap.put("name", "groovy")

   def resultList = Domain.executeQuery('select * from languages where name = :name', paramMap)

我收到一条错误消息,说我没有指定参数名称。所以它表现得好像我没有实际指定参数" name"。我在这里阅读了有关命名参数的Groovy文档:

http://groovy.codehaus.org/api/groovy/sql/Sql.html

但是所有使用命名参数的示例都使用预定义的参数列表。我搜索过但没有找到使用动态参数列表映射的示例。如何将动态参数映射传递给Groovy命名的SQL查询?如果那是不可能的,我怎样才能使用" in"带动态列表的关键字?

为了清楚起见,我正在构建一个动态SQL查询,我希望能够在我继续时将参数添加到地图或列表中。我之前使用的是"?"操作员,直到我不得不使用" in"条款,不适用于"?"。

1 个答案:

答案 0 :(得分:0)

为什么不尝试使用闭包查找所有内容?

def paramMap = [:]
paramMap.put("name", "groovy")
def resultList = Domain.findAll {
    paramMap.containsValue(name)
}

这是文档,希望它有所帮助! http://grails.org/doc/latest/ref/Domain%20Classes/findAll.html