मेरा प्रश्न जेपीए 2.0 के बारे में हैबर्ननेट, @OneToOne रिश्तों और आलसी लोडिंग के साथ है।जेपीए 2.0/हाइबरनेट: LAZY "@OneToOne" के साथ बॉक्स के बाहर क्यों काम करता है?
सबसे पहले मेरी स्थापना:
- स्प्रिंग 3.0.5.RELEASE
- SprnigData जेपीए 1.0.1.RELEASE
- हाइबरनेट 3.5.2-फाइनल
- डीबीएमएस: PostgreSQL 9,0
मैं हाल ही में इस तथ्य से आया हूं कि एक @OneToOne रिश्ते को आलसी तरीके (FetchType.LAZY) नहीं लाया जा सकता है, कम से कम बाइट कोड उपकरण के बिना नहीं एन, समय बुनाई या पसंद संकलित करें। वहाँ कई साइटों यह कहते हैं, उदाहरण के लिए:
- http://community.jboss.org/wiki/SomeExplanationsOnLazyLoadingone-to-one
- http://justonjava.blogspot.com/2010/09/lazy-one-to-one-and-one-to-many.html
- Making a OneToOne-relation lazy
बात मेरी सेटअप के साथ, एक @OneToOne इकाई का एक आलसी लोड हो रहा है काम करने के लिए लगता है "बॉक्स से बाहर", और मैं वास्तव में समझना चाहता हूं क्यों।
@Test
@Transactional
public void testAvatarImageLazyFetching()
{
User user = new User();
user.setAvatarImage(new AvatarImage());
User = userRepository.save(user);
entityManager.flush();
entityManager.clear();
User loadedUser = userRepository.findOne(user.getId());
assertNotNull(loadedUser);
PersistenceUtil persistenceUtil = Persistence.getPersistenceUtil();
assertTrue(persistenceUtil.isLoaded(loadedUser));
assertFalse(persistenceUtil.isLoaded(loadedUser, "avatarImage"));
}
इस परीक्षण का मामला सफल होता है, और Hibernates एसक्यूएल लॉगिंग उत्पादन में, मैं स्पष्ट रूप से देख सकते हैं, कि "avatarImage" प्राप्त नहीं किया जा जाएगा, बस "उपयोगकर्ता": कृपया, मेरी इकाई परीक्षण पर एक नजर है (सिर्फ एक का चयन करें, कोई शामिल हों, "AvatarImage" तालिका आदि के लिए पहुँच नहीं)
उपयोगकर्ता कक्षा में दिशाहीन @OneToOne relationshop इस तरह दिखता है:
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private AvatarImage avatarImage;
तो, सब कुछ बहुत ही सरल - और ऐसा लगता है कि काम करता है।
मेरा प्रश्न दोहराने के लिए: यह क्यों काम कर रहा है, "अवतार छवि" को आलसी क्यों लाया जा सकता है, हालांकि इसे @OneToOne एसोसिएशन के साथ संदर्भित किया गया है?
मैं वास्तव में आपकी सहायता की सराहना करता हूं
बहुत बहुत धन्यवाद!