दिलचस्प पोस्ट
सुडो एको "कुछ" >> / etc / विशेषाधिकारितफ़ाइल काम नहीं कर रहा है … क्या कोई विकल्प है? मैं कैनवास तत्व में एक HTML तत्व कैसे परिवर्तित कर सकता / सकती हूं? # 1071 – निर्दिष्ट कुंजी बहुत लंबी थी; अधिकतम कुंजी लंबाई 767 बाइट्स है आदिम मूल्य बनाम संदर्भ मूल्य एंड्रॉइड: स्पिनर को कस्टम ऑब्जेक्ट लिस्ट में बाँध कैसे करें? इसका मतलब क्या है जब C / C ++ में एक संख्यात्मक स्थिरांक 0 के साथ प्रीफ़िक्स है? Getline के साथ सहायता की आवश्यकता है () थ्रेड.स्टॉप () – बहिष्कृत सेलेनियम 2 में ड्रॉप डाउन विकल्प का चयन कैसे करें एक बैच लिपि में कैसे इंतजार करें? एंड्रॉइड: स्पिनर विजेट का टेक्स्ट रंग विशेषता छुपा कहाँ है? आप विस्तार तरीकों का क्या लाभ मिला है? किसी SQL कथन में फ़ील्ड से प्रमुख शून्य निकालें जावास्क्रिप्ट किसी भी वेब पेज के स्रोत को पढ़ सकता है? खाली सरणी तत्वों को निकालें

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) बैच-साइज और पेज आकार पर निर्भर है।