Hibernate createQuery: परिणाम पर लूप कैसे करें

मेरे पास निम्नलिखित एचक्यूएल कथन है:

select d.model, v.vendor from Device d, Vendor v where d.vendorId = v.id

और निम्नलिखित जावा कोड:

private List allDevices;
//Getter and Setter are created
 public List getAllDevices() {
    return allDevices;
}

public void setAllDevices(List allDevices) {
    this.allDevices = allDevices;
}

public List readDevices() {
    session = HibernateUtil.getSessionFactory().openSession();
    String hql = "select d.model, v.vendor from Device d, Vendor v where d.vendorId = v.id";
    Query query = session.createQuery(hql);
    List list = query.list();
    allDevices = new ArrayList();       
//Here comes the code, loop, for getting the values from the list !?!
[...]
session.close();
return allDevices;    
}

मेरा प्रश्न है: मैं query.list() से मान कैसे प्राप्त कर सकता हूं और उन्हें सभी डेविस में जोड़ सकता हूं ArrayList:

क्लास डिवाइस MySQL डीबी "डिवाइस" तालिका का मैपिंग क्लास है और इसमें स्ट्रिंग कॉलम मॉडल और इंटीजर कॉलम विक्रेता_आईडी है। विक्रेता_आईडी "विक्रेता" तालिका की आईडी है। "विक्रेता" तालिका में इंटीजर कॉलम आईडी और स्ट्रिंग कॉलम vendorname है। मैं जेएसएफ पेज पर मॉडल आईडी और विक्रेता आईडी के बजाय संबंधित विक्रेता नाम पर दिखाना चाहता हूं।

निम्नलिखित लूप के साथ मेरा पहला प्रयास काम नहीं कर रहा है:

for (int i = 0; i < list.size(); i++) {
            device = (Device) list.get(i);
            allDevices.add(device);
        }

क्या कोई मेरी मदद कर सकता है?

0
मैंने गेटर और सेटर विधियों को जोड़ा है
जोड़ा लेखक user2992380, स्रोत
अपने गेटर/सेटर पोस्ट करें? पढ़ने की विधि कैसे कहा जाता है?
जोड़ा लेखक M. Deinum, स्रोत

1 उत्तर

मैं सादा हाइबरनेट के बजाय जेपीए का उपयोग करने का सुझाव देता हूं, फिर आप TypedQuery का उपयोग कर सकते हैं और आप मानकों का उपयोग कर रहे हैं। स्विच करने के लिए काफी आसान होना चाहिए और फिर आप अपना HibernateUtil कक्षा छोड़ सकते हैं

@PersistenceContext
private EntityManager em;

public List readDevices() {
    String hql = "select d.model, v.vendor from Device d, Vendor v where d.vendorId = v.id";
    TypedQuery query = em.createQuery(hql, Device.class);
    allDevices.addAll(query.getResultList());   
    return allDevices;    
}

इसके अलावा आप शायद अपने जेएसएफ समर्थित बीन में यह कोड नहीं चाहते हैं बल्कि इसके बजाय सेवा या रिपोजिटरी क्लास में चाहते हैं।

2
जोड़ा
हाय मैंने आपके द्वारा सुझाए गए प्रयासों की कोशिश की लेकिन EntityManager em में कोई विधि नहीं है TypedQuery ()। मैं उदाहरण के लिए अन्य चुन सकते हैं createamededQuery, createQuery, createNativeQuery बनाएँ!
जोड़ा लेखक user2992380, स्रोत
मेरी गलती। यह सिर्फ createQuery है ... उत्तर संशोधित किया गया है।
जोड़ा लेखक M. Deinum, स्रोत