Как смешивать стратегии наследования с аннотациями JPA и Hibernate?

Согласно Справочной документации по Hibernate , при использовании XML-метаданных Hibernate должна быть возможность смешивать различные стратегии сопоставления наследования:
http://docs.jboss.org/hibernate/stable/core /reference/en/html/inheritance.html#inheritance-mixing-tableperclass-tablepersubclass

Однако соответствующий раздел Справочного руководства по аннотациям Hibernate не охватывает это:
http: // docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#d0e1168

С другой стороны, документы JavaDocs предполагают, что должно быть возможно смешивание стратегий наследования. Например, в javax.persistence.DiscriminatorColumn говорится:

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


Ниже приводится пример сопоставления, которого я пытаюсь достичь. Я хотел бы использовать отображение таблица на подкласс рядом с корнем иерархии, но измените отображение на иерархию таблицы на класс возле листьев. Вот пример кода:

@Entity
@Inheritance( strategy = InheritanceType.JOINED )
public abstract class A implements Serializable
{
    @Id
    private String id;

    // other mapped properties...
}

@Entity
@Inheritance( strategy = InheritanceType.SINGLE_TABLE )
public class BB extends A
{
    // other mapped properties and associations...
}

@Entity
public class BB1 extends BB
{
    // other stuff, not necessarily mapped...
}

@Entity
public class BB2 extends BB
{
    // other stuff, not necessarily mapped...
}

@Entity
@Inheritance( strategy = InheritanceType.SINGLE_TABLE )
public class CC extends A
{
    // other mapped properties and associations...
}

@Entity
public class CC1 extends CC
{
    // other stuff, not necessarily mapped...
}

...

Я ожидаю от этого сопоставления ровно 3 таблицы: A , BB и CC . Оба BB и CC должны иметь столбец дискриминатора по умолчанию с именем DTYPE . Они также должны предоставить все столбцы, необходимые для всех сопоставленных свойств и ассоциаций их соответствующих подклассов.

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


Я что-то упустил? Любые советы приветствуются! Буду рад предоставить дополнительную информацию ...

32
задан Meeque 12 October 2010 в 13:10
поделиться