如何识别 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 知道它们是谁已连接持有外键并且是此关系的拥有方。