2017-02-27 118 views
0

我在试图弄清楚如何设置一个有@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或其他提供者的行为是否不同。

回答

0

由于@Embedded对象的工作原理,直接不能使用它,而是通过在对象中设置属性来使它工作。

@Basic(取= FetchType.LAZY)

记住,懒惰应该只在集合或大型物体使用,并设置取型于懒惰只是为了提供一个线索,这并不意味着它总是会把它变得懒惰而不是渴望。

相关问题