2017-02-27 79 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)

記住,懶惰應該只在集合或大型物體使用,並設置取型於懶惰只是爲了提供一個線索,這並不意味着它總是會把它變得懶惰而不是渴望。

相關問題