2009-12-14 9 views
8

मैंने वेब पर विभिन्न लेख पढ़े हैं, लेकिन वे इस बिंदु पर बिखरे हुए लगते हैं। वास्तव में मुझे अपनी कॉन्फ़िगरेशन में और हाइबरनेट सत्र प्राप्त करने के लिए मेरी विधि में क्या करने की आवश्यकता है। मैं संग्रहित प्रक्रियाओं के लिए कुछ प्रत्यक्ष एसक्यूएल कॉल करने की कोशिश कर रहा हूं। मेरे पास एक बड़ा कोड बेस है कि मैं रुबी से कई स्थिर तरीकों और संग्रहीत प्रक्रिया कॉल के साथ पोर्टिंग कर रहा हूं। अगर मुझे sessionFactory का उपयोग करने की ज़रूरत है, तो मुझे इसका उपयोग कैसे प्राप्त करें?Grails में मैं डोमेन क्लास स्थैतिक विधि के अंदर हाइबरनेट सत्र का उपयोग कैसे करूं?

उत्तर

24

एक स्थिर विधि आप आवेदन संदर्भ से sessionFactory सेम खींच सकते हैं से:

import org.codehaus.groovy.grails.commons.ApplicationHolder as AH 
... 
def ctx = AH.application.mainContext 
def sessionFactory = ctx.sessionFactory 
def session = sessionFactory.currentSession 
+0

धन्यवाद बर्ट। मैं इसे आज़मा दूंगा। – Andrew

+8

एप्लिकेशनहोल्डर अब बहिष्कृत है, क्या इसके लिए एक अद्यतन पद्धति है? –

+1

'आयात grails.util.Holders' गैर बहिष्कृत स्थैतिक धारक आयात करेगा और फिर' Holders.grailsApplication.mainContext.sessionFactory' आपको सत्र फैक्ट्री पर एक हैंडल देगा। – pendext

20

यदि यह एक सेवा या नियंत्रक में है, तो आप सिर्फ sessionFactory

घोषित करने के लिए डीईएफ़ sessionFactory

यह इंजेक्शन की आवश्यकता है। उसके बाद आप

sessionFactory.currentSession 

का उपयोग करने के लिए इसका उल्लेख कर सकते हैं।

सत्र का उपयोग करने वाले तरीकों का एक समूह इंजेक्ट करने के लिए हाइबरनेट-फ़िल्टर प्लगइन (फ़ाइल HibernateFilterGrailsPlugin.groovy) देखें।

+1

मैं विशेष रूप से देख रहा हूँ कि कैसे करने के लिए उपयोग कर सकते हैं इसे डोमेन क्लास स्थैतिक विधि से प्राप्त करें। मैं नियंत्रक से सत्र प्राप्त नहीं करना चाहता हूं और इसे विधियों में पास करना चाहता हूं। 1 99 0 के दशक में – Andrew

+0

मैंने Grails 2.1 के साथ यह कोशिश की और सत्र कारखाने को सेवा में इंजेक्शन नहीं लग रहा है। उपरोक्त बर्ट की विधि अभी भी काम करती है। –

+0

मैंने अब 2.2.3 पर इसका परीक्षण किया और यह ठीक से काम करता है। –

11

आप withSession

Book.withSession { session -> 
    session.clear() 
} 

More info

+0

यह आपको पूर्ण हाइबरनेट सत्र नहीं देता है, इसके बजाय यह एक Grails सत्र है, जिसमें कुछ विधियां अनुपलब्ध हैं (उदाहरण के लिए 'createSQLQuery') –

+0

यह सत्य से भरा टिप्पणी नहीं प्रतीत होता है। सत्र "Grails" सत्र नहीं है, यह एक हाइबरनेट सत्र है। यह निर्धारित करने के लिए काफी आसान है; 'session.clear()' को 'println session.getClass() नाम 'के साथ बदलें और आउटपुट में आपको' org.hibernate.internal.SessionImpl' देखने की अत्यधिक संभावना है –

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