2013-04-13 23 views
2

我的工作在CFML(Railo)父/子应用程序的结构,我有我的延长持续(ORM)氟氯化碳挣扎。扩展ORM持久的氟氯化碳父/子应用

我想要的是我的持久性CFCs住在父应用程序中。它们将包含各种属性以及一些处理核心功能的函数。

在我的子应用程序中,我想扩展ORM CFC,声明任何子应用程序特定的属性,我希望能够添加特定于子应用程序需求的新功能,以及覆盖任何核心功能(如果需要的话),而不触及父应用程序的CFC中的代码。

子应用程序使用它自己的数据源,所以我希望看到在子的在应用程序启动数据库中生成的ORM表。如果我启动父应用程序(它运行独立并有自己的数据源),我可以看到在那里生成的表没有问题。但是,如果我启动子应用程序,则不会生成这些表(在任一数据库中)。

我尝试添加mappedSuperclass='true'父CFC和在儿童的应用程序,扩展父氯氟烃创建CFC。 我也尝试添加父应用程序的ORM文件夹到ORM设置中的CFCLocation文件夹数组。

我能为表明了ORM正在使用的唯一的事情,就是看表是否在数据库中生成。如果还有其他方法,我可以看到ORM CFC是否正在运行,我很想听听它!

下面是一些代码来看看:

家长image.cfc

<cfcomponent persistent="true" entityname="Image" table="tblImages_Base" extends="com.orm.SimpleBasePersistentObject" mappedSuperClass="true"> 
<!--- Identifier ---> 
<cfproperty name="sImageUUID" fieldtype="id" generator="assigned" setter="false" /> 

<!--- Properties ---> 
<cfproperty name="dtDateCreated" ormtype="timestamp" setter="false" /> 
<cfproperty name="dtLastUpdated" ormtype="timestamp" setter="false" /> 
<cfproperty name="sFileName" ormtype="string" /> 
<cfproperty name="iFileSize" ormtype="int" default="0" dbdefault="0" /> 
<cfproperty name="iWidth" ormtype="int" default="0" dbdefault="0" /> 
<cfproperty name="iHeight" ormtype="int" default="0" dbdefault="0" /> 
<cfproperty name="sImageFolder" ormtype="string" dbdefault="" /> 

<cfproperty name="Active" ormtype="boolean" default="0" dbdefault="0" notnull="true" /> 

<!--- Non persistant properties ---> 
<cfproperty name="sImagePath" type="string" persistent="false" /> 
<cfproperty name="sDefaultImageLocation" persistent="false" /> 

<!--- Many Images can have one image type ---> 
<cfproperty name="ImageType" 
      fieldtype="many-to-one" 
      cfc="ImageType" 
      fkcolumn="fk_sImageType" 
      fetch="join" 
      /> 
</cfproperty> 
</cfcomponent> 

子image.cfc

<cfcomponent persistent="true" entityname="Image" table="tblImages_Base" extends="core.orm.Image"> 
</cfcomponent> 

回答

0

你当然可以做继承(单个或多个)使用mappedSuperClass="true",但父CFC(s)不能是持久性的,即mappedSuperClass="true"persistent="true"是互斥的。

我建议你设置它定义要能够扩展基础实体“更高”级别车型。添加mappedSuperClass="true",然后用persistent="false"而不是指定一个表格。

在您的父级和子级应用程序中,您将创建延长这些超类的持久性CFC。我知道这并不完全是因为子应用程序不会从父应用程序继承,但它确实允许它们共享公共属性/方法。

注意,你不应该在定义超类的标识属性:一个需要在每个持久氟氯化碳的明确完成。

“超级”氟氯化碳的位置并不重要 - 只要他们是你的父母和子应用程式存取。无需将该位置添加到您的ORM设置。比方说,你把它们存储一个名为“库”的“库”映射文件夹中:

/库/图像。CFC

<cfcomponent entityname="Image" persistent="false" mappedSuperClass="true" hint="I define common properties/methods and can be extended by other ORM components"> 
<!--- Common Properties---> 
<cfproperty name="dtDateCreated" ormtype="timestamp" setter="false" /> 
<cfproperty name="dtLastUpdated" ormtype="timestamp" setter="false" /> 
<cfproperty name="sFileName" ormtype="string" /> 
...etc 
</cfcomponent> 

/apps/parent/Image.cfc

<cfcomponent entityname="Image" extends="library.Image" persistent="true" table="tblImages_Base"> 
<!--- Identifier ---> 
<cfproperty name="sImageUUID" fieldtype="id" generator="assigned" setter="false" /> 
... 
</cfcomponent> 

/apps/child/Image.cfc

<cfcomponent entityname="Image" extends="library.Image" persistent="true" table="tblImages_Base"> 
<!--- Identifier ---> 
<cfproperty name="sImageUUID" fieldtype="id" generator="assigned" setter="false" /> 
... 
</cfcomponent> 
+0

感谢您的响应。我想我和你在一起...我会放弃并报告回来。 –