Java 是否可以使用InheritanceType.SINGLE\u表保存顶级实体?

Java 是否可以使用InheritanceType.SINGLE\u表保存顶级实体?,java,hibernate,jpa,Java,Hibernate,Jpa,例如,我们有这样一个结构: @Entity @Table(name = "A") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "type") public class A{ } @Entity @DiscriminatorValue(value = "B") public class B{ } 在大多数教程中提到,要保存实体,我们应该保存B实体 B b = new B()

例如,我们有这样一个结构:

@Entity
@Table(name = "A")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public class A{
}

@Entity
@DiscriminatorValue(value = "B")
public class B{

}
在大多数教程中提到,要保存实体,我们应该保存B实体

B b = new B();
b.setName("name");
entityManager.persist(b);
保存时是否可以使用顶级实体类而不是子类?大概是这样的:

A a = new A();
a.setName();
a.setType("B");
entityManager.persist(a)

您可以保存任何实体。关于继承,唯一需要记住的是,您在根表中设置了策略,不能在子类中重写它


请注意,您也应该在根类型上设置一个
鉴别器值
(如果保存该类型的实例)

如果您注意到,我想保存根实体,但使用子实体的鉴别器值。如果您说我可以保存任何实体,请您详细告诉我,在保存根实体时,我应该如何指定子实体的鉴别器值?我注意到您称为“setType”,但只能假设您有其他名为“type”的字段。保存根实体时,显然无法设置discriminatorValue,因为它不是对象中的字段。DiscriminatorValue是仅由JPA管理的代理项字段,而不是由您管理。根实体不是子实体。因此答案是:不,在保存根实体时不可能指定具体类型(例如子类的类型)。非常感谢。