2013-04-13 5 views
2

저는 CFML (Railo)의 상위/하위 응용 프로그램 구조에서 작업 중이므로 영구 (ORM) CFC를 확장하는 데 어려움을 겪고 있습니다.부모/하위 응용 프로그램에서 ORM 영구 CFC 확장

영구 응용 프로그램에서 영구 CFC를 사용하고 싶습니다. 여기에는 다양한 속성과 핵심 기능을 처리하는 몇 가지 기능이 포함됩니다.

내 하위 응용 프로그램에서 하위 응용 프로그램의 특정 속성을 선언하는 ORM CFC를 확장하고 싶습니다. 하위 응용 프로그램의 요구 사항에 맞는 새 기능을 추가하고 싶습니다. 필요한 경우 핵심 기능을 부모 앱의 CFC 코드에 건드리지 않아도됩니다.

하위 응용 프로그램은 자체 데이터 원본을 사용하므로 응용 프로그램 시작시 하위 데이터베이스에서 생성 된 ORM 테이블을 볼 수 있습니다. 부모 응용 프로그램 (독립 실행 형이며 자체 데이터 소스가있는)을 시작하면 문제없이 생성 된 테이블을 볼 수 있습니다. 그러나 자식 응용 프로그램을 시작하면 테이블이 생성되지 않습니다 (두 데이터베이스 중 하나에서).

부모 CFC에 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는 영구적 일 수 없습니다 (예 :).과 persistent="true"은 상호 배타적입니다.

확장 할 수있게하려는 기본 엔터티를 정의하는 "상위"수준의 모델을 설정하는 것이 좋습니다. mappedSuperClass="true"을 추가 한 다음 persistent="false"을 사용하고 이 아닌 테이블을 지정하십시오.

상위 및 하위 응용 프로그램에서 이러한 수퍼 클래스를 확장하는 영구 CFC를 만듭니다. 하위 응용 프로그램이 상위 응용 프로그램에서 상속받지 않을 것이므로 하위 응용 프로그램이 아니라 일반 응용 프로그램/메서드를 공유 할 수 있다는 점을 알고 있습니다.

super 클래스에 identifier 속성을 정의하면 안됩니다.이 속성은 각 영구 CFC에서 명시 적으로 수행해야합니다.

"최고"cfcs의 위치는 부모 및 하위 응용 프로그램에서 액세스 할 수있는 한 중요하지 않습니다. 해당 위치를 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

감사합니다. 나는 너와 함께 있다고 생각한다 ... 나는 그것을 줄 것이고 다시보고 할 것이다. –