У меня есть объект с полем, которое может быть нескольких типов объектов. Этот объект кодируется в одной таблице со столбцом дискриминатора для подтипов поля. Каждый из этих подтипов имеет свои поля, сопоставленные со столбцом в таблице родительских объектов. Я не могу смоделировать это в спящем режиме. Приведенный ниже код возвратит ноль для getSubfield()
независимо от того, какие данные подтипа находятся в таблице.
Схема
id type whosit whatsit
+----+------+--------+---------+
| 1 | "A" | "test" | null |
| 2 | "B" | null | "test" |
+----+------+--------+---------+
Доменные объекты
@Entity
public class Parent {
protected @Id @GeneratedValue int id;
protected Subfield subfield;
public Subfield getSubfield() {return subfield;}
}
@Embeddable
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING)
public abstract class Subfield {}
@DiscriminatorValue("A")
public class TypeA extends Subfield {
public String whosit;
}
@DiscriminatorValue("B")
public class TypeB extends Subfield {
public String whatsit;
}
«ВЫБЕРИТЕ p ОТ ПЕРЕНОСА p»
{id=1,subfield=null}
{id=2,subfield=null}
Можно ли выполнить то, что я хочу, с помощью этой объектной модели, или мне нужно стать более креативным (это устаревшая база данных, изменение схемы не является предпочтительным)