EclipseLink 如何检测首次访问以进行延迟抓取?

How does EclipseLink detect first access to make lazy fetching?

谁能解释一下 EclipseLink 是如何检测到对字段的首次访问以进行延迟获取的?似乎有一些 magic,但我找不到如何完成的方法。

如果我对 @OneToMany 关系的理解正确,EclipseLink 会创建 org.eclipse.persistence.indirection.IndirectList 的实例来控制访问。但是我不明白 EclipseLink 对 @ManyToOne 关系做了什么。

在 ManyToOne 或 OneToOne 情况下,EclipseLink 会进行代码增强以检测访问。 这意味着你有一个代理而不是真实的对象。

有文档:

https://www.eclipse.org/eclipselink/documentation/2.7/concepts/mappingintro002.htm#CHDJAHDC

关于编织的章节也很有趣。 https://www.eclipse.org/eclipselink/documentation/2.7/concepts/app_dev005.htm#CCHJEDFH