0

我有 3 个由 JPA 模型表示的表。

第一:

@Entity
@Table(name = "DECISION")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Decision {
    @Id
    private Long id;
}

下一个类扩展了决策:

@Entity
@Table(name = "SPECIFIC_DECISION")
public class SpecificDecision extends Decision {
    @OneToOne
    @JoinColumn(name = "PERSON_ID")
    private Person person;
}

最后一个是 Person,它只是一个带有人员信息的简单实体类。

现在,当我尝试从数据库中选择所有决策时,我收到一个错误信息,即持久性单元与数据库模式不一致,因为列 DECISION.PERSON_ID 不存在,而我在 SPECIFIC_DECISION 表中确实有它,这就是我映射它的方式在 JPA 模型中。

更有趣的是,如果 SpecificDecision 中没有关系,只有简单的 NUMBER 和 VARCHAR 字段,那么一切正常。

我究竟做错了什么?

4

2 回答 2

1

看起来我的问题有解决方案。默认情况下,JPA 在基表中查找连接列。要更改此行为,需要 JoinColumn 注释中的属性“table”:

@Entity
@Table(name = "SPECIFIC_DECISION")
public class SpecificDecision extends Decision {
    @OneToOne
    @JoinColumn(table = "SPECIFIC_DECISION", name = "PERSON_ID")
    private Person person;
}

问题解决了。

于 2012-09-17T09:21:30.813 回答
0

您没有定义 DiscriminatorColumn,我不确定是什么导致了您的问题,但根据 JPA 规范,即使某些提供商支持您不支持,您在使用 JOINED 策略时始终应该使用鉴别器。链接以获取有关鉴别器的更多信息

于 2012-09-14T11:28:12.420 回答