Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 刷新前读取鉴别器列值。怎么用?_Hibernate_Jpa - Fatal编程技术网

Hibernate 刷新前读取鉴别器列值。怎么用?

Hibernate 刷新前读取鉴别器列值。怎么用?,hibernate,jpa,Hibernate,Jpa,我正在尝试在刷新之前读取映射的鉴别器列 我在Child1实体中映射了此鉴别器列: @DiscriminatorColumn(name = Child1.TYPE) class Child1 extends Father { TYPE = "Child1Type"; } 还有超级班的父亲: @DiscriminatorColumn(name = Father.TYPE_COLUMN) @Inheritance(strategy = InheritanceType.SINGLE_TAB

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

我在
Child1
实体中映射了此鉴别器列:

@DiscriminatorColumn(name = Child1.TYPE)
class Child1 extends Father {

    TYPE = "Child1Type";

}
还有超级班的父亲:

@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;

}
如果调用
父项中的方法来验证类型,则在
类型
变量中会收到NullPointerException:

public boolean isChild1() {
    return this.type.equals(Child1.TYPE);
}
因为我没有在数据库中保存(并刷新)实体。在这种情况下需要做些什么吗?

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

  • 使用
    实例of
    此实例of Child1
  • Parent
    中实现
    isChild1
    以返回
    false
    ,并在
    Child1
    中重写它以返回
    true
    (这更像是OOP)

即使稍后检索实体,JPA也将使用鉴别器列来确定具体类型并实例化它。为什么不利用它呢?

这是一种非常复杂的验证类型的方法。为什么不干脆在
Parent
中实现
Child1
isChild1()
的这个实例,返回
false
,并在
Child1
中重写,返回
true
?还有,为什么在刷新之前你不知道实体的具体类型?@crizzis,你是对的。我试图读取该值(因为代码已经实现),但是您的建议解决了,而且更简单。您可以将此作为答案发布,我将接受:)