JPA继承策略JOINED -子类中的OneToOne关系-为什么它不起作用?

icomxhvb  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(129)

我有3个表由JPA模型表示。
第一个:

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

字符串
下一个类扩展Decision:

@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模型中Map它的方式。
更有趣的是,如果SpecificDecision中没有关系,只有简单的NUMBER和VARCHAR字段,那么一切都正常。
我做错了什么?

s4n0splo

s4n0splo1#

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

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

字符串
问题解决了。

brqmpdu1

brqmpdu12#

你没有定义一个鉴别器列,我不确定这是什么原因导致你的问题,但根据JPA规范,你总是应该使用鉴别器时,使用一个JOINED策略,即使一些提供商支持,你不。Link for more info about discriminator

相关问题