2017-08-24 121 views
5

我有限定在購買一個懶惰@ManyToOne列:休眠@ManyToOne(取= FetchType.LAZY)忽略

@ManyToOne(fetch = FetchType.LAZY) 
Sale sale = null 

然而,當我加載從分貝的實體,它被直接加載:

Purchase purchase = em.find(Purchase.class, id); 
PersistenceUnitUtil unitUtil = em 
     .getEntityManagerFactory() 
     .getPersistenceUnitUtil(); 
System.err.println(unitUtil.isLoaded(purchase, "sale")); 

即使該字段尚未加載,這將返回true

我在做什麼錯?

(休眠4.3.11.Final)

回答

1

因爲它是可以爲空的字段。 Hibernate無法知道該值是否存在於數據庫中,因此它必須查詢db以將值或值賦給該字段。

+0

那麼我能做些什麼來防止這種情況呢? –

+0

沒有太多的選擇,我知道。一種方法是「構建時字節碼檢測」。 http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-lazyproperties – kan

+0

那麼,爲什麼這個功能即使有,當它不能工作?我什至嘗試'nullable = false'沒有任何效果。 –