关于Grails'的几个问题个createCriteria

时间:2014-07-22 14:41:49

标签: sql grails

我读到了关于createCriteria的内容,并对这些内容的工作方式感兴趣,以及它为下拉框提供值的可用性。

所以说,我在数据库资源表中有一个表,我已经在域类中定义了名为Resource.groovy的表。资源表总共有10列,其中5列是

  • 材料ID
  • 材料说明
  • 资源
  • 资源ID
  • 产品代码

所以使用createCriteria,我可以像查询一样使用返回我想要的项目

def resList = Resource.createCriteria().list { 
        and { 
            eq('resource', resourceInstance)
            ne('materialId', '-')
        }
    }

在上面的地方,我想获得与resource = resourceInstance匹配的数据,并且materialId都不等于' - '。

我想在我的表单上使用上面的createCriteria返回的数据,我想在我的选择下拉列表中使用一些列。下面是我用于选择下拉列表的代码。

<g:select id="resourceId" name="resourceId" 
                    from="${resList}"
                    disabled="${actionName != 'show' ? false : true}"  />
  • 如何制作它以便在下拉列表中仅显示从产品代码列中获取的值?我相信使用createCriteria创建的列表会根据createCriteria的规范返回所有10列。但我只想在我的下拉列表中使用产品列值。
  • 如果在我的表单中的某个选择下拉列表中,我想如何自定义数据,我想将值显示为“资源ID - 资源描述”?对于一个选择下拉列表,这些值是超过1列的组合,但我不知道如何在单个选择下拉列表中组合两者。
  • 我读到,与使用createCriteria相比,hql和GORM查询是从表中获取数据的更好方法。这是真的吗?

由于

1 个答案:

答案 0 :(得分:0)

首先请参阅使用select in Grails的文档。回答所有问题:

  • 是的,可以自定义下拉列表中要选择的列表。在这种情况下,它应该类似于from="${resList*.productCode}"

  • 是的,这也可以通过

    等方式进行自定义

    from="${resList.collect { \"${it.resourceId} - ${it.resourceDesc}\" } }"

  • 这取决于。如果域中涉及关联,那么使用Criteria将导致可能不需要的急切提取。但是使用HQL,可以根据需要灵活地定制查询。使用最新版本的Grails,这些边界被最小化了很多。使用DetachedCriteria,尽可能推荐查询等。因此,它与所考虑的场景混合和匹配。