【问题标题】:Is there a way to fetch an @Embedded field lazily?有没有办法懒惰地获取@Embedded 字段?
【发布时间】: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


    【解决方案1】:

    直接你不能,因为@Embedded 对象的工作方式,但是通过在对象中设置属性它应该可以工作。

    @Basic(fetch=FetchType.LAZY)

    请记住,lazy 应该只用于集合或大对象,并且在lazy 上设置获取类型只是提供者的一个线索,这并不意味着它总是会惰性而不是急切地获取它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 2021-10-17
      • 2015-10-25
      • 2014-10-10
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多