【发布时间】:2017-02-27 14:54:20
【问题描述】:
我在试图弄清楚如何设置一个具有必须延迟获取的@Embedded 字段的类时遇到了一些麻烦。我尝试使用@Basic(fetch = FetchType.LAZY) 注释该字段,但它导致持久性API 将该字段视为实现Serializable 的基本类型,因此它将该字段映射到数据库(postgresql)中的BYTEA 字段。我也在 Derby 上进行了测试,结果也是如此。
我还尝试使用@Basic(fetch = FetchType.LAZY) 单独注释@Embeddable 类的字段,而不是注释拥有它的实体的@Embedded 字段。在这种情况下,生成的架构是正确的,但是当我加载实体实例时会急切地获取字段。
我的理解是 @Basic 注释仅用于基本字段/属性,因此预计第一种情况。但是为什么@Embeddable类的字段即使被@Basic(fetch = FetchType.LAZY)注解也被急切地获取呢?另外,我知道可以通过@Basic 和关系注释指定获取策略,但是还有其他方法可以指定应该延迟获取字段吗?我正在使用 EclipseLink 2.6,但如果其他版本的 EclipseLink 或其他提供商的行为不同,请告诉我。
【问题讨论】:
标签: jpa jakarta-ee java-ee-7 jpa-2.1