如何识别 Hibernate 中自引用一对一关系的 mapped/owned 端?
How to identify the mapped/owned sides of a self-referencing one-to-one relationship in Hibernate?
我的 Hibernate 模式有一个端口实体。每个端口应该与另一个端口有零个或一个连接,因此有一个 "connectedPort" 字段引用同一实体:
public class Port {
// ...
@OneToOne
@JoinColumn
private Port connectedPort;
// ...
}
但通常对于@OneToOne 关系会有 "owned" 侧和关系的 "mapped" 侧 - 这里也是这种情况 - 如果是,如何以及为什么?
来自 OneToOne
API 文档:
If the relationship is bidirectional, the non-owning side must use the mappedBy
element of the OneToOne
annotation to specify the relationship field or property of the owning side.
所以,要么你的 connectedPort
与其反向连接端口没有关系并且字段 connectedPort
的持有者有外键,要么关系是双向的,你必须指定谁使用 mappedBy
.
持有外键
编辑 正如我从您的代码片段中假设的那样,您连接的端口不知道谁连接到它们,所以您的 Port
知道它们是谁已连接持有外键并且是此关系的拥有方。
我的 Hibernate 模式有一个端口实体。每个端口应该与另一个端口有零个或一个连接,因此有一个 "connectedPort" 字段引用同一实体:
public class Port {
// ...
@OneToOne
@JoinColumn
private Port connectedPort;
// ...
}
但通常对于@OneToOne 关系会有 "owned" 侧和关系的 "mapped" 侧 - 这里也是这种情况 - 如果是,如何以及为什么?
来自 OneToOne
API 文档:
If the relationship is bidirectional, the non-owning side must use the
mappedBy
element of theOneToOne
annotation to specify the relationship field or property of the owning side.
所以,要么你的 connectedPort
与其反向连接端口没有关系并且字段 connectedPort
的持有者有外键,要么关系是双向的,你必须指定谁使用 mappedBy
.
编辑 正如我从您的代码片段中假设的那样,您连接的端口不知道谁连接到它们,所以您的 Port
知道它们是谁已连接持有外键并且是此关系的拥有方。