दिलचस्प पोस्ट
क्या सी प्रीप्रोसेसर स्ट्रिप टिप्पणी या पहले मैक्रोज़ का विस्तार करता है? स्क्रीन पर माउस स्थान के आसपास क्षेत्र के लिए ज़ूम बॉक्स JQuery के साथ सिमुलेट कीप्रेस रंग पहियों बनाने के लिए फ़ंक्शन NotifyDataSetChange कस्टम एडेप्टर से काम नहीं कर रहा है एआरए बनाम सूचियों का प्रदर्शन "कोई नहीं है" और "== कोई नहीं" के बीच अंतर क्या है एक jQuery AJAX GET कॉल में अनुरोध हेडर पास करें JQuery के साथ एक ड्रॉप-डाउन सूची के चयनित मान को बदलें उपयोगकर्ता एजेंट या जावास्क्रिप्ट से 64-बिट या 32-बिट विंडोज का पता लगाएं? आवेदन। ओपनफॉर्म। गणना = 0 हमेशा मैं एक स्ट्रिंग को एक चर के साथ कैसे जोड़ूं? एडेप्टर डेटा बदलते समय सूची दृश्य को अपडेट करना Xcode से प्रोविजनिंग प्रोफाइल को कैसे निकालें जावास्क्रिप्ट सरणी से यादृच्छिक मूल्य प्राप्त करना

NHibernate क्वेरी प्राप्त करने के साथ ही कई एसक्यूएल क्वेरीज़ और डीबी हिट

मैं एक इकाई का चयन करने और एक संबंधित सूची लाने की कोशिश कर रहा हूं:

Session.QueryOver<UserRole>() .Fetch(x => x.UsersInRole).Eager .List(); 

जो बहुत सारे डेटाबेस हिट में परिणाम पहला एक ऐसा कुछ है:

  SELECT ... FROM UserRoles left outer join UsersInRoles on ... 

और सैकड़ों और अलग-अलग प्रश्न जो कुछ दिखते हैं:

  SELECT ... FROM UsersInRoles left outer join UserRoles on ... WHERE UserRoles.UserId=? 

मैपिंग निम्नलिखित है:

 public class UserRoleMap : ClassMap<UserRole> { public UserRoleMap() { Id(x => x.Id); Map(x => x.RoleName); HasManyToMany(x => x.UsersInRole) .Inverse() .LazyLoad() .Table("UsersInRoles"); } } 

वेब के समाधान से एकत्रित समाधान "NHibernate क्वेरी प्राप्त करने के साथ ही कई एसक्यूएल क्वेरीज़ और डीबी हिट"

मैं कहूंगा, कि यह व्यवहार यही है जिसे हमें अपेक्षा करनी चाहिए। आइए एक परिदृश्य है, जिसमें हमारे पास सिस्टम 2 उपयोगकर्ता और 2 भूमिकाएं हैं

 User1 - Role1 // has only Role1 User2 - Role1 // now we see that Role2 has more then User1 User2 - Role2 

मान लीजिए, पहली क्वेरी, केवल यूज़र 1 और उसके कई-से-कई रिलेशन रोल 1 प्राप्त करेगा । फिलहाल इएसेशन में हमारे पास केवल उपयोगकर्ता 1 है , इसलिए रोल 1 के लिए उपयोगकर्ता का सेट अधूरा है (हम इस समय इज़ेशन में लोड किए गए ऑब्जेक्ट का पुन: उपयोग नहीं कर सकते हैं) लेकिन हमें कैसे पता होना चाहिए कि हम कहाँ हैं? क्या Role1 लिए लोड किए गए सभी डेटा सत्र में नहीं हैं या नहीं?

नई क्वेरी, Role1 लिए डेटा लोड करना जारी किया जाना चाहिए। और इस तरह, हम अंत में इन प्रश्नों के खुराक कर सकते हैं …

मैं सबसे अच्छा समाधान के रूप में क्या देखता हूं (मैं इसे लगभग सभी परिदृश्यों में प्रयोग कर रहा हूं) batch-size सेटिंग है: 19.1.5। बैच फ़ेचिंग का उपयोग करना

 HasManyToMany(x => x.UsersInRole) ... .BatchSize(25) 

अपने सभी संग्रह के नक्शे को .BatchSize(25) और कक्षा नक्शा के लिए भी ऐसा करते हैं। इससे 1 एसक्यूएल स्क्रिप्ट का कारण होगा, लेकिन अंत में अधिक नहीं तो 1 + (2-4) बैच-साइज और पेज आकार पर निर्भर है।