我正在尝试在刷新之前读取我的映射的鉴别器列。
我在Child1
实体中映射了这个鉴别器列:
@DiscriminatorColumn(name = Child1.TYPE)
class Child1 extends Father {
TYPE = "Child1Type";
}
超级班Father
:
@DiscriminatorColumn(name = Father.TYPE_COLUMN)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
abstract class Father {
TYPE_COLUMN = "type"
@Column(name = "type", insertable = false, updatable = false)
private String type;
}
如果我调用Father
中的方法来验证类型,我会在type
变量中收到NullPointerException:
public boolean isChild1() {
return this.type.equals(Child1.TYPE);
}
因为我没有保存(并刷新)数据库中的实体。在这种情况下有事可做吗?
答案 0 :(得分:1)
您并不需要需要来读取鉴别器的值以确定实体的具体类型。有更简单的解决方案:
instanceof
(this instanceof Child1
)isChild1
中实施Parent
以返回false
并覆盖true
以返回Child1
(这是更多OOP)即使稍后检索实体,JPA也会使用discriminator列来确定具体类型并实例化它。为什么不利用这个呢?