我在试图弄清楚如何设置一个有@Embedded
字段的类的时候遇到了一些麻烦,这个字段必须被懒惰地读取。我尝试使用@Basic(fetch = FetchType.LAZY)
注释该字段,但它会导致持久性API将该字段视为实现Serializable
的基本类型,因此它将该字段映射到数据库(postgresql)中的BYTEA
字段。我也在Derby上进行了测试,结果也是如此。有没有一种方法来获取@Embedded领域懒惰?
我也试着注释@Embeddable
类的字段与@Basic(fetch = FetchType.LAZY)
转为单独标注有它的实体的@Embedded
领域。在这种情况下生成的模式是正确的,但是当我加载实体的实例时,这些字段会被热切地提取出来。
我的理解是,@Basic
注释仅用于基本字段/属性,因此第一种情况是预期的。但是为什么@Embeddable
课程的字段即使被注释为@Basic(fetch = FetchType.LAZY)
,也会被热切地获取?另外,我知道提取策略可以通过@Basic
和关系注释来指定,但是还有其他方法可以指定应该延迟提取哪些字段?我使用EclipseLink 2.6,但是让我知道其他版本的EclipseLink或其他提供者的行为是否不同。