CF9 ORM复制左外连接

时间:2009-12-17 10:50:00

标签: hibernate orm coldfusion-9

我正在使用CF9中的ORM功能,而且我对如何复制左外连接查询感到有些困惑。

我有一个TaskList CFC

component output="false" persistent="true"{
  property name="iTaskListID" fieldtype="id" generator="native";
  property name="sTitle" ormtype="string" length="50";
  property name="task" fieldtype="one-to-many" cfc="Task" fkcolumn="iTaskListID";
}

任务CFC

component output="false" persistent="true"{
  property name="iTaskID" fieldType="id" generator="native";
  property name="sTitle" notnull="true" type="string";
  property name="dtCreated" ormtype="date";
  property name="iListingID" ormtype="integer";
  property name="User" fieldtype="many-to-one" cfc="Users" fkcolumn="iUserID";
  property name="iTaskListID" ormtype="integer";
}

然后我执行entityLoad

 <cfset results = entityLoad("TaskList",url.iTaskListID,true)>
 <cfset resultsQuery = entityToQuery(results)>

但是,当我尝试使用resultsQuery时,我无法访问任务cfc属性。例如

cfoutput>
 <cfloop query="resultsQuery">
   #resultsQuery.iTaskID#
  </cfloop>
</cfoutput>

将产生错误元素ITASKID在RESULTSQUERY中未定义。

有人会有什么建议吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

entityToQuery不集成关系属性,只加载Hibernate实体中的本机属性。执行<CFDUMP var="#resultsQuery#">,您只会在查询中看到iTaskListID和sTitle字段(根据您的示例)。

没有理由将entityLoad输出(一个对象,因为您传入ID和unique = true)转换为查询。直接在结果var中访问对象,并通过循环result.getTask()的输出来访问关系,该输出将输出Task对象的数组(TaskList与Task有一对多的关系)。

<cfloop array="#results.getTask()#" index="obj">
   #obj.getITaskID()#
</cfloop>

不是我推荐它,但如果你真的想通过查询方法访问它,请改为调用它:

<cfset taskQuery = entityToQuery(results.getTask())>
<cfoutput query="taskQuery">
    #taskQuery.iTaskID#
</cfoutput>