OpenJPA: كيفية بناء مجموعة عن طريق الاستعلام مع عدد المجموعة
سؤال
في 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
الصفوف (أو الكيانات).