我对grails非常陌生(第2天)。

首先,我发现很难找到容易浏览的资源(文档非常原始,并且教程非常分散,只显示了“hello world”类型的示例)。

我已经将域类设置为与其他数据类型有关联。

class ShopCategoryPage{
//some stuff
ProductProcedure procedure;
ProductCategory category;
//some stuff
}

在我的 Controller 中,我获得了一个类别ID和一个过程ID作为参数,并且试图获得与这些参数相关联的ShopCategoryPage。

我如何“找到”它们?我尝试将id作为procedureId或procedure_id传递,我试图传递由findById生成的ProductProcedure对象...

我不确定如何通过非本机类型的属性查找。

最佳答案

您永远不要使用findById,因为它会绕过基于id的第二级缓存,而只会使用查询缓存,这更加易变。使用get()代替。

话虽如此,有两种方法可以做到这一点。一种是使用get():

def shopCategoryPage = ShopCategoryPage.findByProcedureAndCategory(
       ProductProcedure.get(params.procedureId),
       ProductCategory.get(params.categoryId))

(为两个ID使用适当的参数名称)

或使用HQL查询(或条件查询)在一个查询中而不是3中获取实例:
def shopCategoryPage = ShopCategoryPage.executeQuery(
   'from ShopCategoryPage p where p.procedure.id=:procedureId and p.category=:categoryId',
    [procedureId: params.procedureId.toLong(), categoryId: params.categoryId.toLong()])[0]

09-28 00:42