2015-09-09 10 views
1

Вкратце: существует ли способ написать сопоставление 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 в отображении абстрактного класса и по-прежнему иметь возможность определить единственное ограничение спящего режима?

ответ

0

Вы можете определить любые пользовательские DDL в сопоставлениях hbm, используя <database-object>. Здесь вы можете создавать уникальные ограничения; hbm2ddl выполнит его.

 Смежные вопросы

  • Нет связанных вопросов^_^