假设我有三个实体Company
,StandardCompany
和CompanyTemplate
,其中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
的类型来完成此操作,而无需为其创建新记录?
答案 0 :(得分:2)
如何通过修改公司类型来实现这一目标, 无需为它创建新记录?
你做不到。您正在使用mappedSuperClass,这意味着您将StandardCompany
和CompanyTemplate
存储在单独的表中。
如果您使用Table per subclass with discriminator,则可以更改discriminatorColumn
的值,然后您可以修改类型“而无需创建新记录”。