JPA "DTYPE" 标识符无效

JPA "DTYPE" invalid identifier

我有一个实体对象 A,它与 table 映射 1 到 1,另一个实体对象 "AjoinB" 从单个实体对象扩展并与另一个实体对象连接。因此,我得到了这个 "DTYPE" 无效标识符。下面是一个例子

@Entity
@Table(name="TableA")
@NamedQuery(...)
public class A implements Serializable{
@EmbeddedId
private ABC id;
@Column(name="...")
//getters/setters

@Entity
@Table(name="TableA")
@NameQuery(...)
public class AjoinB extends A{
@OneToOne
@JoinColumn({...}
private B b;
//gettter/setters

有谁知道如何解决这个问题。我知道做继承的东西会生成那个 DTYPE 但我的 table 没有那个列:(

更清楚地说,我可以有一个没有鉴别器列的 table 继承吗?在我的实体中有鉴别器列是没有意义的

如果没有完整的堆栈跟踪,很难进行诊断,但您可能已经知道,API docs say:

If the @DiscriminatorColumn annotation is missing, and a discriminator column is required, the name of the discriminator column defaults to "DTYPE" and the discriminator type to DiscriminatorType.STRING.

其他 answers (also here) 建议添加显式 @DiscriminatorColumn 可能会解决问题。然而,我会第一个承认似乎没有一个决定性的、通用的答案。

我在这里找到了解决方案EclipseLink JPA inheritance without discriminator column

另一个可能的原因,可能是您在代码中有一个相似或重复的 class 具有相同的属性(或列),并且 hibernate 添加了 DTYPE 列作为区分它们的方式。

例如,这种情况下可能出现的错误如下:

无法提取结果集; SQL[n/a];嵌套异常是 org.hibernate.exception java.sql.SQLSyntaxErrorException: ORA-00904: .DTYPE: 无效标识符。