我有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表中有它并且&# 39;我如何在JPA模型中映射它。
如果在SpecificDecision中没有任何关系,只有简单的NUMBER和VARCHAR字段,那么一切都运行正常。
我做错了什么?
答案 0 :(得分: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;
}
问题解决了。
答案 1 :(得分:0)
你没有定义DiscriminatorColumn,我不确定是什么导致了你的问题,但根据JPA规范,你总是应该在使用JOINED策略时使用鉴别器,即使有些提供商支持你不这样做。 Link for more info about discriminator