1

要するに:一意制約の1つのフィールドが抽象クラスのマッピングの一部であり、別のフィールドがサブクラスマッピングで定義されている、2列の一意制約を持つ休止状態のxmlマッピングを記述する方法はありますか?

長いバージョン: 私はAbstractCustomFieldValue他の 2 つのクラス、いくつかのエンティティRefTypeと別のエンティティを参照するクラスを持っていますCustomFieldAbstractCustomFieldValue以下に示すように、いくつかの実装があります。

public abstract class AbstractCustomFieldValue<RefType extends SomeInterface>
{
    protected long id;
    protected RefType refObjekt;
    protected CustomField customField;
    protected String value;
}

public class MyEntityCustomFieldValue extends AbstractCustomFieldValue<MyEntity>
{
}

public class MyOtherEntityCustomFieldValue extends AbstractCustomFieldValue<MyOtherEntity>
{
}

AbstractCustomFieldValueは抽象クラスとしてマップされ、実装はサブクラスとしてマップされます。

<class name="AbstractCustomFieldValue" abstract="true">
    <id name="id">
        <generator class="MyUniqueIdGenerator"/>
    </id>
    <many-to-one name="customField" class="CustomField" column="customfield_id"/>
    <property name="value" length="65535"/>
</class>

<union-subclass name="MyEntityCustomFieldValue" extends="AbstractCustomFieldValue" table="my_entity_customfield_values">
    <many-to-one name="refObjekt" class="MyEntity" column="ref_id"/>
</union-subclass>

<union-subclass name="MyOtherEntityCustomFieldValue" extends="AbstractCustomFieldValue" table="my_other_entity_customfield_values">
    <many-to-one name="refObjekt" class="MyOtherEntity" column="ref_id"/>
</union-subclass>

との組み合わせは一意である必要がrefObjektあります。customFieldこのマッピングでこれを達成する方法はありますか?

customFieldハイバネートせずにデータベースに一意のキーを定義するか、抽象マッピングから削除してサブクラス マッピングに配置するオプションがまだあります。

<properties name="myUniqueKey" unique="true">
    <many-to-one name="customField" class="CustomField" column="customfield_id"/>
    <many-to-one name="refObjekt" class="MyEntity" column="ref_id"/>
</properties>

しかしcustomField、抽象クラスのマッピングを維持しながら、休止状態の一意の制約を定義できる方法はありますか?

4

1 に答える 1

0

<database-object>を使用して、hbm マッピングで任意のカスタム DDL を定義できます。そこで一意の制約を作成できます。hbm2ddl が実行します。

于 2015-09-09T15:20:06.427 に答える