Как смешать стратегии наследования с аннотациями JPA и Hibernate?
СогласноСправочная документация Hibernate при использовании XML-метаданных Hibernate должна быть возможность смешивать разные стратегии отображения наследования:
http://docs.jboss.org/hibernate/stable/core/reference/en/html/inheritance.html#inheritance-mixing-tableperclass-tablepersubclass
Тем не менее, соответствующий разделСправочное руководство по аннотациям в спящем режиме не распространяется на это: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
, Они также должны предоставлять все столбцы, необходимые для всех сопоставленных свойств и ассоциаций их соответствующих подклассов.
Вместо этого иерархия классов, кажется, используеттаблица на подкласс стратегия наследования во всем. То есть Я получаю собственную таблицу для каждой из сущностей, упомянутых выше. Я бы хотел этого избежать, так как листья иерархии классов чрезвычайно легки и кажется просто излишним иметь отдельную таблицу для каждого из них!
Я что-то упустил? Любой совет высоко ценится! Я буду рад предоставить дополнительную информацию ...