2011-10-14 13 views
5

गुगलिंग और एपीआई खोजने के 3 घंटे के बावजूद मुझे कोई संदर्भ नहीं मिल रहा है कि हाइबरनेट मानदंड क्वेरी के भीतर डेटाबेस फ़ंक्शंस का उपयोग करना संभव है या नहीं। विशिष्ट होने के लिए:हाइबरनेट मानदंडों में कॉलम को बदलने के लिए डेटाबेस फ़ंक्शंस का उपयोग करना

मैं पोस्टग्रेज़ डेटाबेस और उस समूह द्वारा डेटाटाइम के दिनांक भाग तक पहुंच बनाना चाहता हूं। मैं कल्पना करता क्वेरी कुछ ऐसा दिखाई देगा:

session.createCriteria(Exam.class) 
    .setProjection(Projections.projectionList() 
    .add(Projections.property("DATE(beginExam)").as("beginDate")) 
    .add(Projections.groupProperty("beginDate"))) 
    .list(); 

यह मैं एक "संपत्ति हल नहीं कर सका: तिथि (beginExam) ..." देने के काम नहीं करता है अपवाद। ऐसा लगता है कि यह करना एक बहुत ही साधारण बात है, और मुझे कुछ याद आना चाहिए। यह देखते हुए कि मैं गतिशील रूप से प्रतिबंधों का निर्माण भी कर रहा हूं (मैंने इसे उदाहरण में छोड़ दिया है) ऐसा लगता है कि मानदंड इसका उपयोग करने के लिए हाइबरनेट घटक है, लेकिन मैं इस बिंदु पर किसी भी सुझाव के लिए खुला हूं, द्वारा अपना खुद का समूह बनाकर।

धन्यवाद

उत्तर

1

Projections.sqlProjection पर एक नजर डालें और Porjections.sqlGroupProjection

+0

मैंने किया था, अच्छी तरह से। ईक के लिए कई तरीकों में और बीच में कॉलम के मूल्य को एक तिथि में बदलने की कोई विधि नहीं है, इसलिए इसकी तुलना किसी समूहप्रॉपर्टी से की जा सकती है या रखी जा सकती है। – user996088

+0

@ user996088: startExam का डेटा प्रकार क्या है? आप Projections.sqlProjection में _any_ SQL का उपयोग कर सकते हैं, इसलिए मुझे नहीं लगता कि आप इसे किसी तारीख में क्यों परिवर्तित नहीं कर पाएंगे। – tscho

+0

मेरी गलती। मेरे एंजस्ट में मुझे यह नहीं पता था कि gkamal ने मुझे गलत दिशा के साथ सही दिशा में इंगित किया था। – user996088

8

आप इस

session.createCriteria(Exam.class) 
    .setProjection(Projections.projectionList() 
    .add(Projections.sqlProjection("date(beginExam) as beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
    .add(Projections.groupProperty("beginDate"))) 
.list(); 

या इस

session.createCriteria(Exam.class) 
    .setProjection(Projections.sqlGroupProjection("date(beginExam) as beginDate", "beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
.list(); 

हाइबरनेट जीन की तरह Projections.sqlGroupProjection तरह Projections.sqlProjection की कोशिश की है एसक्यूएल प्रश्नों में दरों तालिका उपनाम, तो आप अपने एसक्यूएल टुकड़ा करने के लिए {alias} टुकड़ा जोड़ने के लिए इस काम करने के लिए आवश्यकता हो सकती है:

session.createCriteria(Exam.class) 
    .setProjection(Projections.projectionList() 
    .add(Projections.sqlProjection("date({alias}.beginExam) as beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
    .add(Projections.groupProperty("beginDate"))) 
.list(); 

या SQLGroupProjection साथ:

session.createCriteria(Exam.class) 
    .setProjection(Projections.sqlGroupProjection("date({alias}.beginExam) as beginDate", "beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
.list(); 
+0

आह! बिल्कुल सही आपका बहुत बहुत धन्यवाद। मैं इसके माध्यम से काम करूंगा। – user996088

+0

@ user996088: '{alias}' खंड के बारे में मेरा संपादन नोट करें, क्या मेरा सुझाया गया समाधान काम करता है? मैं थोड़ी उत्सुक हूं क्योंकि मैंने वास्तव में किसी एक प्रश्न को निष्पादित नहीं किया है, मैंने अभी उन्हें यहां लिखा है (इसलिए टाइपो भी हो सकता है) – tscho

+0

धन्यवाद Tscho, आपका आखिरी उदाहरण मेरे लिए काम किया Projections.sqlGroupProjection ... –

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