我有一个代码,使用groovy代码中的Grails条件查询数据库。 下面只是测试代码的一部分,它将where子句/条件添加到条件中。
for (Map.Entry<String, String> entry : searchMap.entrySet()) {
String name = entry.getKey();
String city = entry.getValue();
eq("user.name", name)
eq("user.city", city)
}
我希望生成的WHERE
子句看起来像,
WHERE ( user.name = ? and user.city = ?)
OR ( user.name = ? and user.city = ?)
OR ( user.name = ? and user.city = ?)
.......
但我的代码总是以格式
生成WHERE
子句
WHERE ( user.name = ? and user.city = ?)
AND ( user.name = ? and user.city = ?)
AND ( user.name = ? and user.city = ?)
.......
基本上我想在名称,城市列组之间使用OR
而不是AND
。
我尝试了像
or {
eq("user.name", name)
eq("user.city", city)
}
or {
and {
eq("user.name", name)
eq("user.city", city)
}
}
但没有任何内容会将AND
替换为OR
。
我怎样才能做到这一点。
修改
随着,
or {
eq("user.name", name)
eq("user.city", city)
}
WHERE
子句生成为,
WHERE ( user.name = ? and user.city = ?)
AND ( user.name = ? OR user.city = ?)
AND ( user.name = ? OR user.city = ?)
.......
与我需要的完全相反。
答案 0 :(得分:0)
您可以使用或{}块
对逻辑OR中的条件进行分组您的代码可能如下所示:
For(Map.Entry<String, String> entry : searchMap.entrySet()) {
String name = entry.getKey();
String city = entry.getValue();
or {
eq("user.name", name)
eq("user.city", city)
}
}
您可以在http://gorm.grails.org/latest/hibernate/manual/index.html#criteria的7.5.1节中阅读相关内容。连词和分离你会发现几个例子
当你必须处理这些场景时,我建议你启用sql loggin,如果你在这个article中使用grails 3清楚地解释它的过程,如果相反你使用grails 2检查这个{{ 3}}
答案 1 :(得分:0)
希望这将是一个解决方案。您必须明确提及and
阻止。
def xx = Risk.createCriteria().list{
or{
and{
eq 'isAccpeted', true
eq 'isValid', true
}
and{
eq 'investigationStarted', false
eq 'isValid', true
}
}
}
输出
where ((this_.is_accpeted=? and this_.is_valid=?) or (this_.investigation_started=? and this_.is_valid=?))
作为您的代码
or {
and {
eq("user.name", name)
eq("user.city", city)
}
and {
eq("user.name", name)
eq("user.city", city)
}
}