JPA“DTYPE”无效标识符

时间:2016-03-01 21:03:55

标签: java jpa ejb

我有一个实体对象A,它使用表映射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但是我的表没有那个列:(

为了更清楚,我可以在没有鉴别器列的情况下拥有单个表继承吗?在我的实体中使用鉴别器列是没有意义的

3 个答案:

答案 0 :(得分:2)

没有完整的堆栈跟踪很难诊断,但正如您可能已经知道的那样,API docs say

  

如果缺少@DiscriminatorColumn注释,则为鉴别符   列是必需的,鉴别器列的名称默认为   " DTYPE"和鉴别器类型为DiscriminatorType.STRING。

其他answers(也是here)建议添加明确的@DiscriminatorColumn可以解决问题。但是,我是第一个承认这似乎不是一个确凿的通用答案的人。

答案 1 :(得分:0)

答案 2 :(得分:0)

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

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

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