كيفية تحديد كافة السجلات المميزة ككيانات – السبات – JPA؟


أريد تحديد كافة السجلات المميزة وليس سجلاً محددًا وككيانات.

أنا استخدم السبات 5.6.15, خطة العمل المشتركة 2.2 و جى دي كيه 11 ال تي اس

لقد حاولت تحديد Transid ككيان للطلبات ولكني حصلت على:

XML
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class com.tailorfx.pojo.Orders

ما حاولت:

جافا
public List<Orders> custOrder() {
    try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
        CriteriaBuilder cb = session.getCriteriaBuilder();
        CriteriaQuery<Orders> cq = cb.createQuery(Orders.class);
        Root<Orders> root = cq.from(Orders.class);

        cq.select(root.get("transid")).distinct(true);

        return session.createQuery(cq).getResultList();
    }
}

لذلك أريد تحديد جميع عمليات النقل (التحويلات) المميزة ولكن ككيانات وليس كسلسلة.
فكيف نفعل؟

الحل 1

وهنا الجواب:

public List<Orders> custOrder() {
    try ( Session session = HibernateUtil.getSessionFactory().openSession()) {
        CriteriaBuilder cb = session.getCriteriaBuilder();
        CriteriaQuery<Orders> cq = cb.createQuery(Orders.class);
        Root<Orders> root = cq.from(Orders.class);

        Subquery<Long> subquery = cq.subquery(Long.class);
        Root<Orders> subRoot = subquery.from(Orders.class);
        subquery.select(cb.max(subRoot.get("id")));
        subquery.groupBy(subRoot.get("transid"));

        cq.where(cb.in(root.get("id")).value(subquery));

        return session.createQuery(cq).getResultList();
    }
}

コメント

タイトルとURLをコピーしました