Неправильные отображения HBM при использовании сопоставленного суперкласса в графе наследования для ColdFusion 9.0.1 Hotfix 2 - PullRequest
2 голосов
/ 02 ноября 2011

Допустим, у меня есть граф наследования, в котором базовый класс расширяет сопоставленный суперкласс:

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.

...