我在尝试弄清楚如何设置一个必须懒惰取出@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或其他提供程序的行为是否不同。
答案 0 :(得分:0)
直接你不能,因为@Embedded对象的工作原理,但通过设置对象中的属性它应该有效。
@Basic(取= FetchType.LAZY)
请记住,懒惰应该仅用于集合或大对象,并且在懒惰上设置提取类型只是提供者的线索,它并不意味着它总是将其提取为懒惰而不是渴望。