Grails-HQL到CriteriaBuilder

Grails-HQL到CriteriaBuilder,grails,groovy,hibernate-criteria,Grails,Groovy,Hibernate Criteria,我一直在努力理解如何使用标准构建器。在非常简单的场景中,它们是直截了当的。但是下面的HQL将如何表达呢 def pkg_query = "select p from Package as p join p.orgs as orgRole where p.packageScope=(:scope) and orgRole.roleType=(:roleType) and orgRole.org=(:provider)" 查询的第一部分很简单,但是如何访问列表呢 Package master

我一直在努力理解如何使用标准构建器。在非常简单的场景中,它们是直截了当的。但是下面的HQL将如何表达呢

def pkg_query = "select p from Package as p join p.orgs as orgRole where p.packageScope=(:scope) and orgRole.roleType=(:roleType) and orgRole.org=(:provider)"
查询的第一部分很简单,但是如何访问列表呢

  Package master = c.get {
    and {
        eq("packageScope",getMasterScope())
        //imaginary code, 'and' would probably break it as only 1 match in list
        for(orgRole in orgs){
            and{
                eq(orRole.org,provider)
                eq(orgRole.roleType,getCPRole())
            }
        }
    }
  }

您可以根据关联对标准进行建模(不管它们的基数如何),方法是将它们作为接收包含标准的闭包的方法调用。对于您发布的查询,它应该是:

Package.createCriteria().get {
  eq('packageScope', scope)
  orgs {
     and {
        eq('roleType', roleType)
        eq('org', provider)
     }
  }
}

您可以根据关联对标准进行建模(不管它们的基数如何),方法是将它们作为接收包含标准的闭包的方法调用。对于您发布的查询,它应该是:

Package.createCriteria().get {
  eq('packageScope', scope)
  orgs {
     and {
        eq('roleType', roleType)
        eq('org', provider)
     }
  }
}

您可以根据关联对标准进行建模(不管它们的基数如何),方法是将它们作为接收包含标准的闭包的方法调用。对于您发布的查询,它应该是:

Package.createCriteria().get {
  eq('packageScope', scope)
  orgs {
     and {
        eq('roleType', roleType)
        eq('org', provider)
     }
  }
}

您可以根据关联对标准进行建模(不管它们的基数如何),方法是将它们作为接收包含标准的闭包的方法调用。对于您发布的查询,它应该是:

Package.createCriteria().get {
  eq('packageScope', scope)
  orgs {
     and {
        eq('roleType', roleType)
        eq('org', provider)
     }
  }
}

您可以使用下面的代码来获取对象列表

def listOfPackage = Package.createCriteria().list {
      eq('packageScope', scope)
      orgs {
         and {
            eq('roleType', roleType)
            eq('org', provider)
         }
      }
    }

您可以使用下面的代码来获取对象列表

def listOfPackage = Package.createCriteria().list {
      eq('packageScope', scope)
      orgs {
         and {
            eq('roleType', roleType)
            eq('org', provider)
         }
      }
    }

您可以使用下面的代码来获取对象列表

def listOfPackage = Package.createCriteria().list {
      eq('packageScope', scope)
      orgs {
         and {
            eq('roleType', roleType)
            eq('org', provider)
         }
      }
    }

您可以使用下面的代码来获取对象列表

def listOfPackage = Package.createCriteria().list {
      eq('packageScope', scope)
      orgs {
         and {
            eq('roleType', roleType)
            eq('org', provider)
         }
      }
    }

如果您使用的是MySQL,我建议您激活查询日志并检查生成的SQL,然后您可以更多地使用criterias和HQL,并比较两者的实际查询,确保您实现了实际需要的查询-请参阅。我相信其他数据存储也有类似的选择。如果您使用MySQL,我真的建议您激活查询日志并检查生成的SQL,然后您可以更多地使用criterias和HQL,并比较它们的实际查询,确保您实现了您真正想要的查询-请参阅。我相信其他数据存储也有类似的选择。如果您使用MySQL,我真的建议您激活查询日志并检查生成的SQL,然后您可以更多地使用criterias和HQL,并比较它们的实际查询,确保您实现了您真正想要的查询-请参阅。我相信其他数据存储也有类似的选择。如果您使用MySQL,我真的建议您激活查询日志并检查生成的SQL,然后您可以更多地使用criterias和HQL,并比较它们的实际查询,确保您实现了您真正想要的查询-请参阅。我相信其他数据存储也有类似的选择。