2012-11-06 2 views
0

Я нашел решение для своей задачи здесь: mixing-joined-and-single-table-inheritance. Вопрос содержит пример, где смешанные две стратегии наследования: объединены с одной таблицей. Но возможно ли преобразовать это сопоставление аннотаций в XML-сопоставление?Возможно ли такое сопоставление с XML?

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@Table(name = "animals") 
public abstract class Animal { ... 

@MappedSuperclass 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "type") 
public abstract class Mammal extends Animal { ... 

@Entity 
@Table(name = "mammals") 
@PrimaryKeyJoinColumn(name = "mammal_id") 
@DiscriminatorValue(value = "dog") 
public class Dog extends Mammal { ... 

@Entity 
@Table(name = "mammals") 
@PrimaryKeyJoinColumn(name = "mammal_id") 
@DiscriminatorValue(value = "cat") 
public class Cat extends Mammal { ... 

ответ

1

Извините, вчера я просто разместил фрагмент кода, концептуализированный из одноуровневого наследования. Проблема вы столкнулись вызвана

<discriminator column="type" type="string"/> 

не может поставить под < подкласса > и < совместного подкласса > не может быть вложенными. Сегодня я пытаюсь запустить аналогичный код для достижения тех функций, которые вам могут понадобиться. Я попытался поставить < > под < подкласс > для имитации смежного подкласса < >, но < дискриминатор > не будет работать таким образом.

Таким образом, единственное, что я могу придумать, это сделать взаимную связь между животными и млекопитающими. Вот код, который я пробовал, может показаться неудобным для этой концепции.

<hibernate-mapping> 
<class name="bean.Animal" table="animal"> 
    <id name="id" type="java.lang.Integer"> 
     <column name="id" length="50" scale="0" /> 
    </id> 
    <many-to-one name="mammal" 
    column="mammal_id" 
    not-null="true"/> 
</class> 

<class name="bean.Mammal" table="mammal"> 
    <id name="mammal_id" type="java.lang.Integer"> 
     <column name="mammal_id" length="50" scale="0" /> 
    </id> 
    <discriminator column="type" type="string"/> 

    <subclass name="bean.Dog" extends="bean.Mammal" discriminator-value="dog"> 
     </subclass> 
     <subclass name="bean.Cat" extends="bean.Mammal" discriminator-value="cat"> 
     </subclass> 
</class> 

И стол результата:

 

+------------------------------+ 
|Tables      | 
+------------------------------+ 
|animal      | 
|mammal      | 
+------------------------------+ 

И схемы в этих таблицах

 
+------------------------------+ 
|animal      | 
+------------------------------+ 
|id       | 
|mammal_id      | 
+------------------------------+ 

+------------------------------+ 
|mammal      | 
+------------------------------+ 
|mammal_id      | 
|type       | 
+------------------------------+ 

Надеется, что это поможет. Кстати, мне все еще интересно, в чем причина, почему вы не используете аннотацию для решения этой проблемы, поскольку у вас есть решение, просто любопытно :).

+0

Вы попробовали запустить подобное сопоставление? Мой вывод останавливается на 'ERROR ErrorLogger: 57 - Ошибка синтаксического анализа XML (215): содержимое типа элемента« join-subclass »должно соответствовать« (meta *, subselect? '... –

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