在Grails中动态生成SQL查询

在Grails中动态生成SQL查询,sql,grails,gorm,dynamic-queries,Sql,Grails,Gorm,Dynamic Queries,我们在grails应用程序上有一个搜索页面。此页面需要能够基于多个属性动态生成查询 例如: “查找像bob.smith@%这样的电子邮件用户” “找到与电子邮件相同的用户”john。smith@gmail.com" “查找属于组x成员的用户” “查找id为42的用户” 查找名为“Jason P%”的用户 如果这是一个Java应用程序,我将使用hibernate标准API。criteria API的一个问题是它使任意连接变得不可能 那么,有没有一种方法可以像这样动态构建查询?如果GORM中的c

我们在grails应用程序上有一个搜索页面。此页面需要能够基于多个属性动态生成查询

例如:

  • “查找像bob.smith@%这样的电子邮件用户”
  • “找到与电子邮件相同的用户”john。smith@gmail.com"
  • “查找属于组x成员的用户”
  • “查找id为42的用户”
  • 查找名为“Jason P%”的用户
如果这是一个Java应用程序,我将使用hibernate标准API。criteria API的一个问题是它使任意连接变得不可能

那么,有没有一种方法可以像这样动态构建查询?如果GORM中的criteria API可以动态修改,那么就可以工作了,或者我可以使用完全不同的方法。

几个月前@dmahapatro回答了您的问题。您当前的场景类似于:

def user = User.createCriteria().list{
      if(params.email != null){
          or{
             eq('email', params.email)
             iLike('email', "%${params.email}%")
          }
      } else if(params.id != null){
          idEq(params.id)
      } else if(params.name != null){
          eq('name', params.name)
      } else if(params.memberOf != null){ //This can be optimized
         groups{
            eq('name', params.memberOf)
         }
      }
   }

这就是您要找的吗?

我怎样才能动态地将其他实体/表加入到该查询中?@Benju我已经这样做了,假设
与用户关联。如果您显示一些要进行采样的域,将非常方便。:)