ColdFusion Form:我可以指定在加载时传递给相关实体的init参数吗?

ColdFusion Form:我可以指定在加载时传递给相关实体的init参数吗?,orm,coldfusion,Orm,Coldfusion,假设我有一个页面实体,它可以有一个关联的文档实体数组:一个简单的一对多关系 <cfcomponent entityName="Page" persistent="true" table="pages"> <!--- A Page can have many Documents ---> <cfproperty name="document" fieldType="one-to-many" cfc="Document" fkColumn="pageID" i

假设我有一个页面实体,它可以有一个关联的文档实体数组:一个简单的一对多关系

<cfcomponent entityName="Page" persistent="true" table="pages">

  <!--- A Page can have many Documents --->
  <cfproperty name="document" fieldType="one-to-many" cfc="Document" fkColumn="pageID" inverse="true">

</cfcomponent>

但是,每个文档都需要知道其文件系统目录的路径,并且此属性的值可以根据上下文而变化,因此它不是持久的,需要在实例化时传入

<cfcomponent entityName="Document" persistent="true" table="documents">

  <!--- This value needs to be set so the document knows its location --->
  <cfproperty name="directoryPath" persistent="false">

  <!--- Many Documents can belong to one Page --->
  <cfproperty name="page" fieldType="many-to-one" cfc="Page" fkColumn="pageID">

  <cffunction name="init" output="false">
    <cfreturn this/>
  </cffunction>

</cfcomponent>

如果手动加载页面的文档数组或使用Bean工厂,则可以指定directoryPath变量作为传递给Document init()方法的参数。但是在这里,文档的加载是由Hibernate自动完成的

当ORM加载相关对象时,是否有方法将init参数传递给它们


我知道我可以在加载文档后循环并指定目录,也许这是最佳实践,但在init上将值传递给每个文档似乎更有效。有可能吗?

翻阅文档,似乎没有办法满足您的要求

我建议的一件事是,您可以在Page对象中设置一个属性,然后从文档访问它,而不是在文档中循环设置属性

所以,在加载页面之后,您将有类似于
Page.setDocumentPath(documentPath)的内容


然后,在显示文档时,可以使用类似于
document.getPage().getDocumentPath()的内容

为什么文件系统路径不是
文档的属性?在我看来,这是一个简单的解决办法。@JonathanWilson。对不起,我显然不够清楚。路径是文档的一个属性。我的问题是设定它的价值。加载子数组时,是否可以告诉ORM在init()上传递值?似乎答案是否定的-必须在加载后通过手动循环数组来设置。添加了文档定义以使事情更清楚。我仍然不清楚您的用例。您是第一次设置并保存文档,还是希望每次从数据库加载文档时都设置此属性?如果是后者,为什么?乔纳森再次道歉,我没有解释directoryPath属性不是持久性的,因为它根据上下文而变化。因此,每次实例化文档时都需要设置它。我想知道当ORM加载数组时,它是否可以为我执行此操作。我想答案是否定的,但如果有办法的话,效率会更高。问题更新。这是一个很好的想法,适用于我发布的示例(因此标记为答案)。事实上,尽管我的“文档”对象的耦合程度较低:它们可以属于许多不同类型的对象(不仅仅是页面),也可以不属于任何对象(独立文档),所以我根本不让它们知道父对象。在这种情况下,我想我陷入了循环。不过谢谢你的建议。我正试图找到一种方法,将一些东西注入到ORM创建的实体中。还不知道如何做到这一点,但这里有参考资料,如果你能理解他们在说什么,请告诉我:-)。所以,您可以拥有一个了解上下文的对象,并可能使用postLoad()事件处理程序将其注入到文档中。