OpenJPA: كيفية بناء مجموعة عن طريق الاستعلام مع عدد المجموعة

StackOverflow https://stackoverflow.com/questions/4255543

سؤال

في JPQL أريد بناء الاستعلام المكافئ لهذا:

select *, count(*) as finger_count from page_delta_summary 
where delta_history_id = ? and change_type = ? group by fingerprint;

أين fingerprint هو حقل varchar في الجدول page_delta_summary. ما لدي هذا:

select d, count(d) as finger_count from PageDeltaSummary d 
where d.deltaHistoryId = :deltaHistoryId and d.type = :pageDeltaType 
GROUP BY d.fingerprint"

أين PageDeltaSummary هو كيان بلدي. لكنني أحصل على الاستثناء التالي:

org.apache.openjpa.persistence.argumentException: استعلامك على النوع "class com.su3analytics.sitedelta.model.pagedeltasummary" مع مرشح "Selec =: مجموعة Pagedeltatype بواسطة D.FingerPrint "غير صالح. يجب أن تتضمن الجمل الخاصة بك والبنود فقط المجاميع أو القيم التي تظهر أيضًا في شرط التجميع.

يعمل الاستعلام بشكل جيد إذا قمت بإزالة إما العد (D) كـ Finger_Count أو المجموعة.

أي اقتراحات؟

شكرًا

هل كانت مفيدة؟

المحلول

استعلام SQL الأصلي الخاص بك لا معنى له ، لذلك لا يمكنك التحويل إلى JPQL.

أعتقد أنك تريد الحصول على العد page_delta_summary صفوف مرضية where شروط لكل fingerprint. إذا كان الأمر كذلك ، فإن استعلام SQL يشبه هذا:

select fingerprint, count(*) as finger_count from page_delta_summary  
where delta_history_id = ? and change_type = ? group by fingerprint;

و JPQL - مثل هذا:

select d.fingerprint, count(d) from PageDeltaSummary d    
where d.deltaHistoryId = :deltaHistoryId and d.type = :pageDeltaType    
GROUP BY d.fingerprint

هذه الاستفسارات تعيد أزواجfingerprint, finger_count> بدلا من ممتلئة page_delta_summary الصفوف (أو الكيانات).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top