一个映射实体中的外键为空
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,但 Potatoe
有 Onion
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 关系保持外键为空