如何编写ORM语句以从数据对象返回过滤后的数据?

时间:2013-01-10 15:34:39

标签: orm coldfusion hql

好。我刚开始在Coldfusion应用程序中使用ORM。直到现在它一直很顺利。我遇到了这个障碍。我有这两个表:

enter image description here

以下是我用于将数据加载到页面中的代码。 if的第二部分是默认加载,第一部分是用于将列表过滤到特定类别的部分。

<cfif form.filtercat neq ''>
    <cfset load = ormexecuteQuery('from product_spec_cats as cats inner join cats.product_spec_cat_prod_cat_lnk as link WHERE link.spl_prod_cat_id = #form.filtercat#',{},false)>
<cfelse>
    <cfset load = entityload('product_spec_cats')>
</cfif>

cfelse查询会返回这个,这正是我需要的:

enter image description here

cfif查询返回此问题,因为每个父数组中有两个子节点。

enter image description here

所以,我的问题是,如何编写HQL以返回与默认查询结构相同的数据,并且仍然能够过滤数据?

1 个答案:

答案 0 :(得分:7)

您正在运行的HQL正在选择product_spec_catsproduct_spec_cat_prod_cat_link实体,因为您没有定义要选择的内容:

from product_spec_cats as cats 
inner join cats.product_spec_cat_prod_cat_lnk as link 
WHERE link.spl_prod_cat_id = #form.filtercat#

该查询与普通SQL查询中的select * from ...基本相同。你想要做的是:

select cats
from product_spec_cats as cats 
inner join cats.product_spec_cat_prod_cat_lnk as link 
where link.spl_prod_cat_id = #form.filtercat#

根据您的关系设置方式,您甚至可能不需要内部联接,您可以像这样编写查询:

from product_spec_cats as cats    
where cats.product_spec_cat_prod_cat_lnk.spl_prod_cat_id = #form.filtercat#`

最后,我建议您在将form范围内的某些内容添加到查询中时使用查询参数,尤其是

ormExecuteQuery("
    select cats
    from product_spec_cats as cats
    inner join cats.product_spec_cat_prod_cat_lnk as link
    where link.spl_prod_cat_id = :catID
", { catID = form.filtercat });