मैं जेपीए में नया हूं और एक जेनेरिक जेपीए डीएओ को कार्यान्वित करना चाहता हूं और पेजिनेशन को लागू करने के लिए एक क्वेरी परिणाम सेट की पंक्तियों की संख्या को खोजने की आवश्यकता है। वेब खोजने के बाद, मुझे ऐसा करने का व्यावहारिक तरीका नहीं मिल रहा है।एक जेपीए 2 CriteriaQuery की पंक्तियों की संख्या को सामान्य जेपीए डीएओ में कैसे गिनें?
public <T> Long findCountByCriteria(CriteriaQuery<?> criteria) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Long> countCriteria = builder.createQuery(Long.class);
Root<?> entityRoot = countCriteria.from(criteria.getResultType());
countCriteria.select(builder.count(entityRoot));
countCriteria.where(criteria.getRestriction());
return em.createQuery(countCriteria).getSingleResult();
}
हालांकि, उस कोड जब join
का उपयोग कर काम नहीं करता है: यहाँ कोड कई लेख में सुझाव दिया है। जेपीए मानदंड एपीआई का उपयोग कर एक क्वेरी परिणाम सेट की पंक्तियों को गिनने का कोई तरीका है?
अद्यतन: यहाँ कोड है कि CriteriaQuery बनाने है:
CriteriaQuery<T> queryDefinition = criteriaBuilder.createQuery(this.entityClass);
Root<T> root = queryDefinition.from(this.entityClass);
और कुछ मिलती जड़ में जोड़ा जा सकता है जब तक क्वेरी निष्पादित किया गया है:
public Predicate addPredicate(Root<T> root) {
Predicate predicate = getEntityManager().getCriteriaBuilder().ge(root.join(Entity_.someList).get("id"), 13);
return predicate;
}
और उत्पन्न अपवाद नहीं है जैसे:
org.hibernate.hql.ast.QuerySyntaxException: अमान्य पथ: 'generatedAlias1.id' [चयन गणना (generatedAlias0) generatedAlias0 रूप entity.Entity से जहां (generatedAlias0.id> = 13L) और ( (generatedAlias1.id < = 34L))]
जो generatedAlias1 चाहिए अस्तित्व पर रहें और जेनरेट किया गया एलीस 0 उस संगठन पर होना चाहिए जो मैं उस पर शामिल हुआ। ध्यान दें कि मैं लागू करता हूं ठीक से जुड़ें क्योंकि जब मैं गिनती क्वेरी के बिना क्वेरी निष्पादित करता हूं तो यह त्रुटि के बिना निष्पादित करता है और जॉइन ठीक से काम करता है लेकिन जब मैं गिनती क्वेरी निष्पादित करने का प्रयास करता हूं तो यह अपवाद फेंकता है।
क्या आप हमें दिखा सकते हैं कि आपने CriteriaQuery > मानदंड – perissf
@perissf मैंने पोस्ट को अपडेट किया है। – stacker
समान समस्याओं के कुछ अन्य उत्तरों देखें: http://stackoverflow.com/questions/9001289/jpa-hibernate-criteriabuilder-how-to-create-query-using-relationship-object/9002225#9002225 और http: // stackoverflow.com/questions/9025196/how-to-use-jpa-criteria-api-when-joining-many-tables/9025656#9025656 – perissf