有没有办法懒洋洋地获取@Embedded字段?

时间:2017-02-27 14:54:21

标签: jpa java-ee java-ee-7 jpa-2.1

我在尝试弄清楚如何设置一个必须懒惰取出@Embedded字段的类时遇到了一些麻烦。我尝试使用@Basic(fetch = FetchType.LAZY)注释该字段,但它会导致持久性API将该字段视为实现Serializable的基本类型,因此它将字段映射到BYTEA字段中数据库(postgresql)。我也在Derby上测试了它,同样的事情发生了。

我还尝试使用@Embeddable单独注释@Basic(fetch = FetchType.LAZY)类的字段,而不是注释拥有它的实体的@Embedded字段。在这种情况下生成的模式是正确的,但是当我加载实体的实例时,会急切地获取字段。

我的理解是@Basic注释仅用于基本字段/属性,因此第一种情况是预期的。但是为什么即使用@Embeddable注释@Basic(fetch = FetchType.LAZY)类的字段也会被急切地取出?另外,我知道获取策略可以由@Basic和关系注释指定,​​但有没有其他方法可以指定应该懒惰地获取字段?我正在使用EclipseLink 2.6,但请告诉我其他版本的EclipseLink或其他提供程序的行为是否不同。

1 个答案:

答案 0 :(得分:0)

直接你不能,因为@Embedded对象的工作原理,但通过设置对象中的属性它应该有效。

@Basic(取= FetchType.LAZY)

请记住,懒惰应该仅用于集合或大对象,并且在懒惰上设置提取类型只是提供者的线索,它并不意味着它总是将其提取为懒惰而不是渴望。