У меня проблема с объектной моделью и Hibernate. Я хотел бы, чтобы вся модель была сохранена как одна таблица.
Я попробовал следующее, но когда я прошу Hibernate сгенерировать файлы для создания SQL, он создает 3 таблицы вместо только 1. Иерархия классов может показаться странной, но это, конечно, выходит из контекста:)
Попытка 1:
@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "CATEGORY", discriminatorType = DiscriminatorType.STRING, length = 10)
@Table(name = "the_table")
public abstract class A {}
@MappedSuperclass
@DiscriminatorValue(value = "B")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING, length = 20)
public abstract class B extends A {}
@Entity
@DiscriminatorValue(value = "X")
public class X extends B {}
@Entity
@DiscriminatorValue(value = "Y")
public class Y extends B {}
@Entity
@DiscriminatorValue(value = "Z")
public class Z extends B {}
Попытка 2:
Мы добираемся туда, не он создает 1 таблицу, но столбец дискриминатора не генерируется. Кто-нибудь может обнаружить ошибку?
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "CATEGORY", discriminatorType = DiscriminatorType.STRING, length = 10)
@DiscriminatorFormula(value = "CATEGORY || '_' || TYPE")
@Table(name = "the_table")
public abstract class A {}
@Entity
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING, length = 20)
public abstract class B extends A {}
@Entity
@DiscriminatorValue(value = "B_X")
public class X extends B {}
@Entity
@DiscriminatorValue(value = "B_Y")
public class Y extends B {}
@Entity
@DiscriminatorValue(value = "B_Z")
public class Z extends B {}