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,你是对的。我试图读取该值(因为代码已经实现),但是您的建议解决了,而且更简单。您可以将此作为答案发布,我将接受:)