@ReplaceEntity + InheritanceType.JOINED

Неожиданное поведение при сочетании @ReplaceEntity и InheritanceType.JOINED у замещаемой сущности

Например, с помощью конструктора создаем:

@ReplaceEntity(Category::class)
@DiscriminatorValue("1")
@JmixEntity
@PrimaryKeyJoinColumn(name = "ID", referencedColumnName = "ID")
@Table(name = "EXT_CATEGORY")
@Entity
open class ExtCategory : Category() {
    @Column(name = "IS_TABLE")
    var isTable: Boolean? = null
}

Ожидаем, что в БД будет:

  1. dynat_category со всеми своими атрибутами, определенными в io.jmix.dynattr.model.Category
  2. ext_category c атрибутами id и is_table

Но получаем ext_category с id, is_table и всеми атрибутами dynat_category (как будто реализовалась стратегия InheritanceType.TABLE_PER_CLASS или что-то подобное)
При этом если попытаться создать категорию (экраны dynat_Category.browse, dynat_Category.edit), то при сохранении вылезает ругань на not null констрейнты.

Мы пошли слегка в обход и сделали так:

//@ReplaceEntity(Category::class) //пока не ставим
@DiscriminatorValue("1")
@JmixEntity
@PrimaryKeyJoinColumn(name = "ID", referencedColumnName = "ID")
@Table(name = "EXT_CATEGORY")
@Entity
open class ExtCategory : Category() {
    @Column(name = "IS_TABLE")
    var isTable: Boolean? = null
}

Создался changelog

    <changeSet id="1" author="PgTest">
        <createTable tableName="EXT_CATEGORY">
            <column name="ID" type="UUID">
                <constraints nullable="false" primaryKey="true" primaryKeyName="PK_EXT_CATEGORY"/>
            </column>
            <column name="IS_TABLE" type="BOOLEAN"/>
        </createTable>
    </changeSet>
    <changeSet id="2" author="PgTest">
        <addForeignKeyConstraint baseColumnNames="ID" baseTableName="EXT_CATEGORY"
                                 constraintName="FK_EXT_CATEGORY_ON_ID" referencedColumnNames="ID"
                                 referencedTableName="DYNAT_CATEGORY"/>
    </changeSet>

После его применения добавили @ReplaceEntity(Category::class) и все дальнейшие changelog’и про EXT_CATEGORY и DYNAT_CATEGORY игнорировали (он снова пытался добавить в ext_category все поля из category, включая traits)
Тогда все стало работать, как нам было надо.
Возможно, мы изначально что-то стали делать не так и есть какой-то более правильный путь для получения нужного нам результата?

Не могли бы вы пояснить, зачем вам InheritanceType.JOINED?
Вы создаете наследников Category? Как вы их используете?

Добрый день! Да, хотели воспользоваться возможностью расширения функциональности, чтобы слегка модифицировать Category и CategoryAttribute.
У нас активы привязаны к классам активов, и нужна была возможность к каждому активу привязать несколько категорий с атрибутами, в зависимости от того, к какому классу активов принадлежит этот актив. А еще динамические атрибуты из некоторых категорий нужны табличные. Думали это сделать, отнаследовавшись от Category и CategoryAttribute с replace parent, но в итоге к счастью пошли другим путём))

1 симпатия