我有一个对象,其中一个字段可以是多个对象类型中的任意一种。该对象在一个包含子类型字段的鉴别器列的单个表中编码。每个子类型将其字段映射到父对象表中的一列。我似乎无法在 Hibernate 中对此建模。无论表中是什么子类型数据,下面的代码都将返回 null 。
模式
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;
}
"SELECT p FROM parent p"
{id=1,subfield=null}
{id=2,subfield=null}
使用这个对象模型可以实现我想要的吗,还是需要更有创意一些(这是一个遗留数据库,不希望更改架构)?