OneToOne 的 mappedBy 行为怪异
OneToOne's mappedBy behaves weird
为什么双向 OneToOne
关系在以下情况下表现得有点奇怪?:
- 我用相同反面实体
创建了 2 个所有者端实体
- 通过另一个 运行 应用程序,我找到第二个所有者 方实体(与
EntityManager
),然后 到达反面 对象
- 此时如果我通过反面对象的引用到达所有者对象,我得到第一个所有者(附图帮助)
实体没什么特别的:
员工包含:
@OneToOne(cascade = CascadeType.ALL)
private Person person;
而 Person 包含:
@OneToOne(mappedBy="person")
private Employee employee;
这让我感到困惑,具有误导性。这可能是一个错误,还是程序员 必须 了解它们的可能性?
为什么要为两个不同的员工重复使用同一个 Person
?这不再是 OneToOne
关系。
顺便说一下,我怀疑后面发生了什么,Hibernate 执行了以下查询:
SELECT e FROM employee e WHERE person_id = ?
在这种情况下,结果集将包含两行,Hibernate 将只使用第一行,当然在这种情况下顺序是未定义的(取决于您使用的数据库)。
您可以通过启用 SQL 日志记录来仔细检查。
为什么双向 OneToOne
关系在以下情况下表现得有点奇怪?:
- 我用相同反面实体 创建了 2 个所有者端实体
- 通过另一个 运行 应用程序,我找到第二个所有者 方实体(与
EntityManager
),然后 到达反面 对象 - 此时如果我通过反面对象的引用到达所有者对象,我得到第一个所有者(附图帮助)
实体没什么特别的:
员工包含:
@OneToOne(cascade = CascadeType.ALL) private Person person;
而 Person 包含:
@OneToOne(mappedBy="person") private Employee employee;
这让我感到困惑,具有误导性。这可能是一个错误,还是程序员 必须 了解它们的可能性?
为什么要为两个不同的员工重复使用同一个 Person
?这不再是 OneToOne
关系。
顺便说一下,我怀疑后面发生了什么,Hibernate 执行了以下查询:
SELECT e FROM employee e WHERE person_id = ?
在这种情况下,结果集将包含两行,Hibernate 将只使用第一行,当然在这种情况下顺序是未定义的(取决于您使用的数据库)。
您可以通过启用 SQL 日志记录来仔细检查。