यह मेरे डीएओ में है:

public List<Weather> getCurrentWeather() {  
    return sessionFactory.getCurrentSession().createQuery("from Weather").list();
}

यह तालिका मौसम से सभी तत्व प्राप्त करता है। लेकिन मान लें कि मैं ऐसा कुछ करना चाहता हूं (मुझे टेबल वेदर से केवल एक तत्व चाहिए):

public Weather getCurrentWeather() {    
    return sessionFactory.getCurrentSession().createQuery("from Weather where id = 1").list(); // here should be something else than list()
}

मुझे पता है कि नहीं होना चाहिए list() अंत में, लेकिन केवल एक वस्तु प्राप्त करने के लिए मुझे वहां क्या लिखना चाहिए?

11
Jaanus 16 सितंबर 2011, 19:07

3 जवाब

सबसे बढ़िया उत्तर

यदि आपके पास एक आईडी है, तो आप बस प्राप्त करें का उपयोग करें:

public Weather getCurrentWeather() {    
    return sessionFactory.getCurrentSession().get(Weather.class, 1); 
}

यदि आपको कोई प्रश्न करने की आवश्यकता है, तो हाँ, आपको परिणाम सेट के शीर्ष को पकड़ना होगा, या आप क्वेरी पर uniqueResult() का उपयोग कर सकते हैं।

12
Affe 16 सितंबर 2011, 19:18
1
UniqueResult() एक वस्तु है, आप मौसम और सामान्य वस्तु के अंतर को कैसे संभालेंगे? क्या मुझे इसे पागलपन से मौसम में डालना चाहिए? या कोई और उपयुक्त तरीका है?
 – 
Jaanus
16 सितंबर 2011, 19:29
2
हाँ, आपने इसे डाला। प्रश्नों के साथ संकलन समय प्रकार की सुरक्षा जैसी कोई चीज़ नहीं है। कंपाइलर को यह कैसे पता होना चाहिए कि आपका एचक्यूएल स्टेटमेंट अंत में क्या बनाने जा रहा है?
 – 
Affe
16 सितंबर 2011, 19:33
लेकिन क्या यह तब काम करता है जब मेरे पास आईडी के अलावा कुछ और होता है, उदाहरण के लिए कुछ पूर्णांक फ़ील्ड?
 – 
Jaanus
16 सितंबर 2011, 21:09
प्राप्त करें केवल आईडी के लिए है। इसका यथासंभव उपयोग करना उचित है, क्योंकि यह L1 कैश में जाता है। यह अप्रासंगिक हो सकता है यदि आपके पास कड़े अनुरोध क्षेत्र हैं और यह सुनिश्चित है कि प्रति सत्र केवल एक बार इसे प्राप्त करें। यदि आप कास्टिंग से बचना चाहते हैं तो आप एचक्यूएल लिखने के बजाय अपनी क्वेरी बनाने के लिए मानदंड एपीआई का उपयोग कर सकते हैं।
 – 
Affe
16 सितंबर 2011, 21:34
पहले विकल्प के साथ भी कास्टिंग आवश्यक है? क्या (Weather.class, 1) चीज़ मौसम की कक्षा नहीं लौटाती है?
 – 
Jaanus
16 सितंबर 2011, 23:05

क्या सूची प्राप्त करने में कुछ गड़बड़ है? :) यहां तक ​​​​कि अगर आप जानते हैं कि केवल 1 हाइबरनेट है तो यह नहीं मान सकता। सूची प्राप्त करना वैसे भी सुरक्षित है!

public Weather getCurrentWeather() {    
    List<Weather> list = sessionFactory.getCurrentSession().createQuery("from Weather where id = 1").list(); // here should be something else than list()
    return (list.isEmpty() ? null : list.get(0));
}
10
Brian Colvin 16 सितंबर 2011, 19:20
हाँ, मैंने सूची प्राप्त करने के बारे में सोचा, लेकिन मैंने सोचा कि क्या कोई और तरीका भी है। फिर भी, क्या मुझे डीएओ में सूची से मौसम में परिवर्तन को संभालना चाहिए, या सूची के पहले तत्व को प्राप्त करके, मेरे विचार में इसे संभालना चाहिए? कौन सा उचित उपयोग होगा?
 – 
Jaanus
16 सितंबर 2011, 19:26
खैर यह वास्तव में आप पर निर्भर है, लेकिन जब तक आप सूचियों को हर समय आपके विचार में वापस नहीं करना चाहते, मैं इसे डीएओ स्तर पर करूँगा। साथ ही, विधि का नाम बताता है कि आप केवल वर्तमान मौसम चाहते हैं ताकि बाद में आपके कोड का उपयोग करने वाले अन्य लोग भ्रमित हो सकें कि एक सूची क्यों लौटाई जा रही है
 – 
Brian Colvin
16 सितंबर 2011, 19:49

आपको नीचे दिए गए मानदंड API का उपयोग करने की आवश्यकता है:

    List<LeaveManagement> leaveManagements =      session.createCriteria(LeaveManagement.class)
            .add( Restrictions.isNull("approvedTimeStamp") )
            .uniqueResult();

    If you want to write a hql query you can write as:

    String hql = "from LeaveManagement where approvedTimeStamp is null";
         Query query = session.createQuery(hql);
        LeaveManagement results = (LeaveManagement) query.uniqueResult();
0
Anuj Panwar 27 पद 2018, 14:19