Согласно Справочной документации по 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
. Они также должны предоставить все столбцы, необходимые для всех сопоставленных свойств и ассоциаций их соответствующих подклассов.
Вместо этого иерархия классов, кажется, использует стратегию наследования таблица на подкласс . Т.е. У меня есть своя таблица для каждой из упомянутых выше сущностей. Я бы хотел избежать этого, поскольку листы иерархии классов чрезвычайно легкие, и иметь отдельную таблицу для каждого из них просто кажется излишним!
Я что-то упустил? Любые советы приветствуются! Буду рад предоставить дополнительную информацию ...