如何在ColdFusion ORM中将实体从一种类型转换为另一种类型?

时间:2011-10-04 21:15:21

标签: orm coldfusion type-conversion coldfusion-9

假设我有三个实体CompanyStandardCompanyCompanyTemplate,其中Company是其他两个实体的基类:

                Company
                  /\
                 /  \
                /    \
  StandardCompany    CompanyTemplate

组件映射:

component name="Company" mappedSuperClass="true"
{
    property name="Name";
}

component name="StandardCompany" persistent="true" extends="Company"
{
    property name="Owner";
}

component name="CompanyTemplate" persistent="true" extends="Company"
{
    property name="UsageCount";
}

用户应该能够将任何StandardCompany转换为CompanyTemplate并再次转回。我知道只要用户想要转换CompanyTemplate

,我就可以创建新的StandardCompany
function ConvertToTemplate(StandardCompany company)
{
    var template = EntityNew("CompanyTemplate");
    // copy all properties from company to template
    EntitySave(template);
}

但是这将创建一个新记录并打破旧公司的任何书签。我希望能够将其转换为CompanyTemplate而无需创建任何新记录。我正在使用每层次表映射。

如何通过修改Company类型来完成此操作,而无需为其创建新记录?

1 个答案:

答案 0 :(得分:2)

  

如何通过修改公司类型来实现这一目标,   无需为它创建新记录?

你做不到。您正在使用mappedSuperClass,这意味着您将StandardCompanyCompanyTemplate存储在单独的表中。

如果您使用Table per subclass with discriminator,则可以更改discriminatorColumn的值,然后您可以修改类型“而无需创建新记录”。