一个映射实体中的外键为空

Posted

技术标签:

【中文标题】一个映射实体中的外键为空【英文标题】:Foreign key is null in one mapping entity 【发布时间】:2018-01-31 21:23:40 【问题描述】:

我想知道为什么当我用mappedBy 映射两个实体时,在目标类中我有ID 我的成员类,但在我的成员类中我没有目标类ID。 示例代码:

 //class Onion
@OneToOne(mappedBy = "onion", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Potatoe potatoe;

//class Potatoe
@OneToOne(cascade = CascadeType.ALL)
private Onion onion;

一切正常,我有双向关系。 但是在 DB 上,我注意到 Onion 类没有来自 Potatoe 的 ID,但 PotatoeOnion ID。 我知道当我想从洋葱对象中获取土豆对象时,持久性查询具有洋葱 ID 的土豆的数据库。

为什么会这样?洋葱桌可以放土豆ID吗?

Eclipslink 2.5.0 PostgreSQL 9.1

【问题讨论】:

【参考方案1】:

看起来是这样,只有一个外键,因为你只有一个(双向)关系,由 Potatoe->Onion 映射控制,所以它用具有到 Onion 的外键的 Potatoe 表来表示。如果您想要另一个从 Onion 到potatoe 的外键,则意味着您要求的关系可以完全独立于 Potatoe->Onion 关系。这很容易通过删除 mappedBy 指示符来完成,这将使 Onion->Potatoe 映射完全独立并使用自己的外键。然后,您的模型将具有两个必须同时维护的单向映射。

【讨论】:

以上是关于一个映射实体中的外键为空的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy 命令式映射无法使用另一个实体的外键添加实体

Spring Boot:与@JoinColumn 的 ManyToOne 关系保持外键为空

spring boot jpa中的多对一映射中的外键未在子表中更新

《企业应用架构模式》 三

关于hibernate注解方式的实体类映射

hibernate 映射总结