2017-08-24 9 views
5

मैं खरीद पर एक आलसी @ManyToOne स्तंभ के रूप में परिभाषित किया है:हाइबरनेट @ManyToOne (लाने = FetchType.LAZY) पर ध्यान नहीं दिया

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

हालांकि, जब मैं db से इकाई लोड, यह सीधे लोड हो जाता है:

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

क्योंकि यह व्यर्थ क्षेत्र है। हाइबरनेट यह नहीं जान सकता कि क्या मान डीबी में मौजूद है या नहीं, इसलिए इसे शून्य या फ़ील्ड को मान निर्दिष्ट करने के लिए डीबी से पूछना चाहिए।

+0

तो मैं इसे रोकने के लिए क्या कर सकता हूं? –

+0

मुझे पता है कि इतने सारे विकल्प नहीं हैं। एक तरीका है "बिल्डटाइम बाइटकोड उपकरण"। http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-lazyproperties – kan

+0

तो यह फ़ंक्शन तब भी क्यों है जब यह कभी काम नहीं कर सकता? मैंने बिना किसी प्रभाव के 'nullable = false' की कोशिश की। –

संबंधित मुद्दे