在刷新之前读取鉴别器列值。怎么样?

时间:2017-06-29 17:08:09

标签: hibernate jpa

我正在尝试在刷新之前读取我的映射的鉴别器列。

我在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);
}

因为我没有保存(并刷新)数据库中的实体。在这种情况下有事可做吗?

1 个答案:

答案 0 :(得分:1)

您并不需要需要来读取鉴别器的值以确定实体的具体类型。有更简单的解决方案:

  • 使用instanceofthis instanceof Child1
  • isChild1中实施Parent以返回false并覆盖true以返回Child1(这是更多OOP)

即使稍后检索实体,JPA也会使用discriminator列来确定具体类型并实例化它。为什么不利用这个呢?