में सामान्य क्वेरी के बजाय टाइपेडक्वियर क्या यह प्रश्न टाइप किए गए टाइप के रूप में लिखना संभव है और दो लांग को ऑब्जेक्ट में दो सार्वजनिक लांग फ़ील्ड के अंदर चलाने दें।जेपीए
Query q = em.createQuery(
"SELECT c.id, COUNT(t.id) " +
"FROM PubText t " +
"JOIN t.comm c " +
"WHERE c.element = ?1 " +
"GROUP BY c.id");
q.setParameter(1, e);
List<?> rl = q.getResultList();
Iterator<?> it = rl.iterator();
HashMap<Long, Long> res = new HashMap<Long, Long>();
while (it.hasNext()) {
Object[] n = (Object[]) it.next();
res.put((Long)n[0], (Long)n[1]);
}
return res;
हाय @ कोस्टजा मुझे एक त्रुटि मिल रही है (एक से अधिक रिटर्न के साथ क्वेरी के लिए TypedQuery नहीं बना सकता)। मेरा एसक्यूएल इस तरह दिखता है: 'नई com.company.ui.EntityIDKey (c.companyId, c.name) कंपनी सी से चुनें जहां c.companyId शून्य नहीं है और c.name शून्य और लंबाई नहीं है (trim (c.name))> 0 क्रम से क्रमबद्ध करें। मैं एक टाइपेडक्वियर का उपयोग निम्नानुसार कर रहा हूं: 'सूची कंपनियां = getEntityManager()। CreateQuery (sql, EntityIDKey.class) .getResultList(); ' –
यह स्थिति हो सकती है यदि आपकी EntityIDKey एक इकाई नहीं है। प्रदाता ऐसे प्रश्नों का समर्थन नहीं करने के लिए स्वतंत्र है। क्या आपने नियमित प्रश्न का उपयोग करने की कोशिश की है? – kostja
जो सच है, 'EntityIDKey' एक इकाई नहीं है। मैं हाइबरनेट प्रदाता का उपयोग कर रहा हूं और किसी भी तरह से माना जाता है कि यह काम करेगा। एक नियमित क्वेरी जो 'कंपनी' का संग्रह बनाता है ठीक काम करता है। –