我发现很酷,在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"条款,不适用于"?"。
答案 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