2017-08-24 4 views
5

は私のように購入の怠惰@ManyToOne列が定義されて無視さ(= FetchType.LAZYフェッチ)休止@ManyToOne

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

それがNULL可能フィールドがあるので。 Hibernateは、値がdbに存在するかどうかを知ることができないため、dbにクエリを実行してnullまたは値をフィールドに割り当てる必要があります。

+0

これを防ぐにはどうすればよいですか? –

+0

私が知っているほど多くのオプションはありません。 1つの方法は、「ビルド時のバイトコード計測」です。 http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetch-lazyproperties – kan

+0

なぜ、この関数は決してうまくいかない場合でもそこにありますか?私は 'nullable = false'を試みても何の効果もありませんでした。 –