我对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]