如何在运行时获取鉴别器值

我们有以下课程

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) // optional annotation as this is default
@DiscriminatorColumn(name = "apType", discriminatorType = DiscriminatorType.STRING, length = 255)
@DiscriminatorValue("AP")
public class ApplicationProcess {
}

还有这个

@Entity
@DiscriminatorValue("APS")
public class ApplicationProcessScheme extends ApplicationProcess {
}

现在我需要在运行时知道是否是 .由于这是由jpa自动处理的,因此我无法获取此值。ApplicationProcessDiscriminatorValueAP or APS

我们正在调用一个采用 as 参数的方法,我想避免使用来检查它是什么类型。如果我能做这样的事情,会更酷ApplicationProcessinstanceof

applicationProcess.getApType().equals("AP");

答案 1

您可以将鉴别器映射为只读属性:

public class ApplicationProcess { 

    ...

    @Column(name = "apType", insertable = false, updatable = false)
    private String apType;

}

答案 2

我可以想象它可能会有所帮助的几种情况,但是尽管您需要它的原因,您可以在抽象类方法上创建如下

@Transient
public String getDiscriminatorValue(){
    DiscriminatorValue val = this.getClass().getAnnotation( DiscriminatorValue.class );

    return val == null ? null : val.value();
}

推荐