sql - Groovy 中的动态命名参数?

标签 sql hibernate grails groovy

我发现在 Groovy SQL 中可以做到这一点真的很酷:

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

我正在尝试让 HQL“in”关键字与用作参数的动态列表一起使用,而不是固定列表。

我也知道你可以使用“?” 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)

我收到一条错误消息,说我没有指定参数名称。所以就好像我没有实际指定参数“名称”一样。我在这里阅读了关于命名参数的 Groovy 文档:

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

但是所有使用命名参数的示例都使用预定义的参数列表。我已经搜索并没有找到使用动态参数列表映射的示例。如何将参数的动态映射传递给 Groovy 命名 SQL 查询?如果那不可能,我如何在动态列表中使用“in”关键字?

需要说明的是,我正在构建一个动态 SQL 查询,并且我希望能够在进行过程中将参数添加到 map 或列表中。我之前使用的是“?”运算符,直到我不得不使用“in”子句,它不适用于“?”。

最佳答案

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

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

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

关于sql - Groovy 中的动态命名参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24143654/

相关文章:

java - 我无法在 JPQL/Hibernate 中沮丧 - 无法找到 ID 为 16 的域。Scoreable

java - hibernate :org.hibernate.MappingException:未知实体:entity.Item

java - 如何从字符串中删除某些特定单词并将其存储在临时变量中并将该变量发送到我的查询

grails - 映射破坏了我的域名类(class)

android - 如何在 Android 的 Eclipse Debug模式下查看 SQL 数据库

sql - 行创建时间戳在表中是否唯一?

sql - 甲骨文数据库。将行的副本插入同一个表(重复键错误消息)

javascript - 无法格式化/解析此日期

java - Hibernate 5 的自定义序列生成器

sql - 在Oracle中,如果我对2列创建复合索引,那么在什么情况下会使用该索引来搜索记录?