Вкратце: существует ли способ написать сопоставление xibernate xml с единственным ограничением по столбцу, где одно поле уникального ограничения часть отображения абстрактного класса и другого поля определена в подклассовом отображении?Как сопоставить уникальное противопоставление нескольких столбцов в спящем режиме с абстрактным полем класса и поле подкласса
Длинная версия: У меня есть класс AbstractCustomFieldValue
, который ссылается на два других класса, некоторый объект RefType
и другой объект CustomField
. AbstractCustomFieldValue
имеет несколько реализаций, как показано ниже.
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
в отображении абстрактного класса и по-прежнему иметь возможность определить единственное ограничение спящего режима?