假设我有一个继承图,其中基类扩展了映射的超类:
component name="Entity" mappedSuperClass="true"
{
property name="CreatedOn";
}
component name="Pet" extends="Entity" table="Pet" discriminatorcolumn="pet_type"
{
property name="PetId" fieldtype="id" generator="native";
property name="Name";
}
component name="Dog" extends="Pet" table="Pet" discriminatorvalue="Dog"
{
property name="FavoriteFood";
}
component name="Cat" extends="Pet" table="Pet" discriminatorvalue="Cat"
{
property name="FavoriteSleepingSpot";
}
在这种情况下,我有一个Pet
基类,有两个子类Dog
和Cat
。 Pet
还扩展了Entity
,它提供了一些审核属性。
在 ColdFusion 9.0.1 和 ColdFusion 9.0.1修补程序1 中,这些组件已正确映射。我通过转储HBM映射来验证它。但是,在 ColdFusion 9.0.1 HotFix 2 中,映射不正确。例如,Cat
映射应为:
<hibernate-mapping>
<subclass discriminator-value="Cat"
entity-name="Cat" extends="cfc:model.Pet"
lazy="true" name="cfc:model.Cat">
<property name="FavoriteSleepingSpot" type="string">
<column name="FAVORITE_SLEEPING_SPOT"/>
</property>
</subclass>
</hibernate-mapping>
但实际产生的是:
<hibernate-mapping>
<subclass discriminator-value="Cat"
entity-name="Cat" extends="cfc:model.Pet"
lazy="true" name="cfc:model.Cat">
<property name="FavoriteSleepingSpot" type="string">
<column name="FAVORITE_SLEEPING_SPOT"/>
</property>
<property name="CreatedOn" type="timestamp">
<column name="CREATED_ON"/>
</property>
</subclass>
</hibernate-mapping>
换句话说,子类映射在CreatedOn
类中包含Entity
时不应该这样,这可以理解地导致以下错误:
实体映射中的重复列:Cat列:CREATED_ON(应使用insert =“false”update =“false”映射)
我的问题是,我的实体被宣布的方式有问题吗?或者我偶然发现 Hotfix 2 中的错误?如果是这样,它的修复方法是什么?
我目前使用的解决方法是转储HBM文件并手动编辑它们以删除重复的属性映射。这工作正常,但每次实体更改时我都必须重复此过程。不幸的是,我们无法回滚到Hotfix 1,因为我们需要Hotfix 2中的一些修复。