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